Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

390 lines
8.9 KiB

#include <afx.h>
#include "vktbl.h"
char vkstrTable[][15] =
{
"VK_LBUTTON",
"VK_RBUTTON",
"VK_CANCEL",
"VK_MBUTTON",
"VK_BACK",
"VK_TAB",
"VK_CLEAR",
"VK_RETURN",
"VK_SHIFT",
"VK_CONTROL",
"VK_MENU",
"VK_PAUSE",
"VK_CAPITAL",
"VK_ESCAPE",
"VK_SPACE",
"VK_PRIOR",
"VK_NEXT",
"VK_END",
"VK_HOME",
"VK_LEFT",
"VK_UP",
"VK_RIGHT",
"VK_DOWN",
"VK_SELECT",
"VK_PRINT",
"VK_EXECUTE",
"VK_SNAPSHOT",
"VK_INSERT",
"VK_DELETE",
"VK_HELP",
"VK_LWIN",
"VK_RWIN",
"VK_APPS",
"VK_NUMPAD0",
"VK_NUMPAD1",
"VK_NUMPAD2",
"VK_NUMPAD3",
"VK_NUMPAD4",
"VK_NUMPAD5",
"VK_NUMPAD6",
"VK_NUMPAD7",
"VK_NUMPAD8",
"VK_NUMPAD9",
"VK_MULTIPLY",
"VK_ADD",
"VK_SEPARATOR",
"VK_SUBTRACT",
"VK_DECIMAL",
"VK_DIVIDE",
"VK_F1",
"VK_F2",
"VK_F3",
"VK_F4",
"VK_F5",
"VK_F6",
"VK_F7",
"VK_F8",
"VK_F9",
"VK_F10",
"VK_F11",
"VK_F12",
"VK_F13",
"VK_F14",
"VK_F15",
"VK_F16",
"VK_F17",
"VK_F18",
"VK_F19",
"VK_F20",
"VK_F21",
"VK_F22",
"VK_F23",
"VK_F24",
"VK_NUMLOCK",
"VK_SCROLL",
"VK_LSHIFT",
"VK_RSHIFT",
"VK_LCONTROL",
"VK_RCONTROL",
"VK_LMENU",
"VK_RMENU",
"VK_ATTN",
"VK_CRSEL",
"VK_EXSEL",
"VK_EREOF",
"VK_PLAY",
"VK_ZOOM",
"VK_NONAME",
"VK_PA1",
"VK_OEM_CLEAR",
// added for Pagasus
"VK_OEM_PLUS",
"VK_OEM_COMMA",
"VK_OEM_MINUS",
"VK_OEM_PERIOD",
"VK_OEM_1",
"VK_OEM_2",
"VK_OEM_3",
"VK_OEM_4",
"VK_OEM_5",
"VK_OEM_6",
"VK_OEM_7",
"VK_OEM_102"
};
DWORD vkdwTable[] =
{
VK_LBUTTON
,VK_RBUTTON
,VK_CANCEL
,VK_MBUTTON
,VK_BACK
,VK_TAB
,VK_CLEAR
,VK_RETURN
,VK_SHIFT
,VK_CONTROL
,VK_MENU
,VK_PAUSE
,VK_CAPITAL
,VK_ESCAPE
,VK_SPACE
,VK_PRIOR
,VK_NEXT
,VK_END
,VK_HOME
,VK_LEFT
,VK_UP
,VK_RIGHT
,VK_DOWN
,VK_SELECT
,VK_PRINT
,VK_EXECUTE
,VK_SNAPSHOT
,VK_INSERT
,VK_DELETE
,VK_HELP
,VK_LWIN
,VK_RWIN
,VK_APPS
,VK_NUMPAD0
,VK_NUMPAD1
,VK_NUMPAD2
,VK_NUMPAD3
,VK_NUMPAD4
,VK_NUMPAD5
,VK_NUMPAD6
,VK_NUMPAD7
,VK_NUMPAD8
,VK_NUMPAD9
,VK_MULTIPLY
,VK_ADD
,VK_SEPARATOR
,VK_SUBTRACT
,VK_DECIMAL
,VK_DIVIDE
,VK_F1
,VK_F2
,VK_F3
,VK_F4
,VK_F5
,VK_F6
,VK_F7
,VK_F8
,VK_F9
,VK_F10
,VK_F11
,VK_F12
,VK_F13
,VK_F14
,VK_F15
,VK_F16
,VK_F17
,VK_F18
,VK_F19
,VK_F20
,VK_F21
,VK_F22
,VK_F23
,VK_F24
,VK_NUMLOCK
,VK_SCROLL
,VK_LSHIFT
,VK_RSHIFT
,VK_LCONTROL
,VK_RCONTROL
,VK_LMENU
,VK_RMENU
,VK_ATTN
,VK_CRSEL
,VK_EXSEL
,VK_EREOF
,VK_PLAY
,VK_ZOOM
,VK_NONAME
,VK_PA1
,VK_OEM_CLEAR
// added for Pagasus
,VK_OEM_PLUS
,VK_OEM_COMMA
,VK_OEM_MINUS
,VK_OEM_PERIOD
,VK_OEM_1
,VK_OEM_2
,VK_OEM_3
,VK_OEM_4
,VK_OEM_5
,VK_OEM_6
,VK_OEM_7
,VK_OEM_102
};
int imaxvktable = sizeof(vkdwTable)/sizeof(DWORD);
CAccel::CAccel()
{
m_dwFlags = 0;
m_dwEvent = 0;
m_strText = "";
}
CAccel::CAccel(LPCSTR strText)
{
CString strAcc = strText;
m_dwFlags = 0;
m_dwEvent = 0;
m_strText = "";
// First check for the VIRTKEY or ASCII tag
if(strAcc.Find("VIRTKEY")!=-1)
{
m_dwFlags |= ACC_VK;
// Check for the Key tags
if(strAcc.Find("Ctrl")!=-1)
m_dwFlags |= ACC_CTRL;
if(strAcc.Find("Shift")!=-1)
m_dwFlags |= ACC_SHIFT;
if(strAcc.Find("Alt")!=-1)
m_dwFlags |= ACC_ALT;
// Now clean the string and get the VK code
int iPos = strAcc.Find("VK_");
if(iPos==-1)
{
// something is wrong
m_dwFlags = 0;
m_dwEvent = 0;
m_strText = "";
}
int iCount = 0;
while(strAcc[iPos+iCount]!=',')
iCount++;
m_dwEvent = StringToVK(strAcc.Mid(iPos, iCount));
}
else if(strAcc.Find("ASCII")!=-1)
{
// Check for the Key tags
if(strAcc.Find("Ctrl")!=-1)
{
int iPos = strAcc.Find('+');
if(iPos!=-1)
{
m_dwEvent = ((DWORD)strAcc[iPos+1])-0x40;
}
}
else if(strAcc.Find("Alt")!=-1)
{
int iPos = strAcc.Find('+');
if(iPos!=-1)
{
m_dwEvent = ((DWORD)strAcc[iPos+1]);
m_dwFlags |= ACC_ALT;
}
}
else
{
m_dwEvent = (DWORD)strAcc[0];
}
}
}
CAccel::CAccel(DWORD dwFlags, DWORD dwEvent)
{
m_dwFlags = dwFlags;
m_dwEvent = dwEvent;
// Accelerator handling
if(ISACCFLG(m_dwFlags, ACC_CTRL))
m_strText += "Ctrl+";
if(ISACCFLG(m_dwFlags, ACC_SHIFT))
m_strText += "Shift+";
if(ISACCFLG(m_dwFlags, ACC_ALT))
m_strText += "Alt+";
if(ISACCFLG(m_dwFlags, ACC_VK))
{
m_strText += VKToString(m_dwEvent);
m_strText += ", VIRTKEY";
}
else
{
if(m_dwEvent + 0x40 >= 'A' && m_dwEvent + 0x40 <= 'Z')
{
m_strText += "Ctrl+";
m_strText += (char)(m_dwEvent + 0x40);
}
else m_strText += (char)m_dwEvent;
m_strText += ", ASCII";
}
}
CString CAccel::VKToString(DWORD dwEvent)
{
CString strVK = "";
if((dwEvent >= 0x30) && (dwEvent <= 0x5A))
{
strVK = "VK_";
strVK += (char)dwEvent;
}
int i = 0;
while(i<imaxvktable)
{
if(dwEvent==vkdwTable[i++])
{
strVK = vkstrTable[i-1];
break;
}
}
return strVK;
}
DWORD CAccel::StringToVK(CString str)
{
DWORD dwVK = 0;
if(str.GetLength()==4)
{
// remove the VK_ and get the char
str = str.Mid(3);
dwVK = (DWORD)str[0];
}
else
{
int i = 0;
while(i<imaxvktable)
{
if(str==vkstrTable[i++])
{
dwVK = vkdwTable[i-1];
break;
}
}
}
return dwVK;
}