项目中要对对话框的键盘按键做出相应,实现逻辑如下:
VS2005开发MFC的wince项目;在对话框中‘重写’ PreTranslateMessage方法;
1.头文件中添加:virtual BOOL PreTranslateMessage(MSG* pMsg);
2.cpp文件的实现代码:
BOOL CSystemSetupDlg::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message==WM_KEYDOWN)
{
UINT iKey=(UINT)pMsg->wParam;
switch(iKey)
{
case VK_F1:
//可以用GetKeyState()检测按键状态
if(GetKeyState(VK_CONTROL)<0)
{
//CTRL+F1的处理逻辑
}
break;
case VK_F2:
if(GetKeyState(VK_CONTROL)<0)
{
//CTRL+F2的处理逻辑
}
break;
}
}
return CDialog::PreTranslateMessage(pMsg);
}
这样对话框就能相应键盘按键消息了。
3.CEDIT控件只允许输入数字
BOOL CXXDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO:Add your specialized code here and/or call the base class
CEdit*pEdit = (CEdit*)GetDlgItem(IDC_EDIT1);
ASSERT(pEdit &&pEdit->GetSafeHwnd());
//可以使用pEdit->m_hwnd替代GetSafeHwnd
if((WM_KEYDOWN == pMsg->message)&&(pEdit->GetSafeHwnd() ==pMsg->hwnd))
{
if((pMsg->wParam >= _T('0')&& pMsg->wParam<= _T('9'))
|| ((pMsg->wParam >= VK_NUMPAD0)&& (pMsg->wParam<= VK_NUMPAD9))
|| (_T('*') == pMsg->wParam) || (_T('#') ==pMsg->wParam)
|| (VK_LEFT == pMsg->wParam) || (VK_RIGHT ==pMsg->wParam)
|| (VK_UP == pMsg->wParam) || (VK_DOWN ==pMsg->wParam)
|| (VK_DELETE == pMsg->wParam) || (VK_BACK ==pMsg->wParam))
{
return CDialog::PreTranslateMessage(pMsg);
}
else
{
return TRUE;
}
}
returnCDialog::PreTranslateMessage(pMsg);
}
4.控件知识
键代码:
0~9,A~Z 为ASCII码,(去除ASCII码前的0),如A为65,不是065;
VK值列表
VK_CANCEL Ctrl+Break
VK_TAB Tab
VK_RETURN Enter
VK_SHIFT Shift
VK_CONTROL Ctrl
VK_MENU Alt
VK_LBUTTON 01 鼠标左键
VK_RBUTTON 02 鼠标右键
VK_CANCEL 03 用于执行Ctrl+C或Ctrl+Break
VK_MBUTTON 04 鼠标中键
VK_BACK 08 Backspace键
VK_TAB 09 Tab键
VK_CLEAR 0C Clear键
VK_RETURN 0D Enter键
VK_SHIFT 10 Shift键
VK_CONTROL 11 Ctrl键
VK_MENU 12 Arl键
VK_PAUSE 13 Pause键
VK_CAPITAL 14 Capslock键
VK_ESCAPE 1B Ese键
VK_SPACE 20 SpaceBar键
VK_PRIOR 21 PgUp键
VK_NEXT 22 PgDn键
VK_END 23 End键
VK_HOME 24 Home键
VK_LEFT 25 Left Arrow键
VK_UP 26 Up Arrow键
VK_RIGHT 27 Right Arrow键
VK_DOWN 28 Down Arrow键
VK_SELECT 29 Select键
VK_EXECUTE 2B Execute键
VK_SNAPSHOT 2C PrintScreen键
VK_INSERT 2D Ins键
VK_DELECT 2E Del键
VK_HELP 2F Help键
VK_0 30 0键
.........
VK_9 39 9键
VK_A 41 A键
… … …
VK_Z 5A Z键
VK_NUMAPD0 60 数字板0键
… … …
VK_NUMAPD9 69 数字板9键
VK_MULTIPY 6A 乘号键
VK_ADD 6B 加号键
VK_SEPARATOR 6C Separator键
VK_SUBSTRACT 6D 减号键
VK_DECIMAL 6E 小数点键
VK_DIVIDE 6F 除号键
VK_F1 70 F1键
… … …
VK_F24 87 F24键
VK_NUMLOCK 90 NumLock键
VK_SCROLL 91 ScrollLock键
VK_ESCAPE Esc
VK_SPACE Space
VK_PRIOR Page Up
VK_NEXT Page Down
VK_END End
VK_HOME Home
VK_LEFT 向左方向键
VK_UP
VK_RIGHT
VK_DOWN
VK_DELETE Delete
VK_INSERT Inser
VK_NUMPAD0~VK_NUMPAD9 小键盘上的0-9键
VK_F1-VK_f12 F1-F12键