摘自:http://blog.csdn.net/howard_liu1314/article/details/8222357
项目中要对对话框的键盘按键做出相应,实现逻辑如下:
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<=