在MFC中,PreTranslateMessage是虚函数,是用来截获消息的。我们可以通过重载它来处理键盘和鼠标消息。在sdk中,这有所不同,我们必须在回调函数LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)中处理消息。
它和PreTranslateMessage起的作用是类似的,只是MFC封装的更好而已。
PreTranslateMessage是消息在送给TranslateMessage函数之前被调用的,绝大多数本窗口的消息都要通过这里,比较常用,当你需要在MFC之前处理某些消息时,常常要在这里添加代码.。
头文件中添加
源文件中添加
通过代码实现热键
BOOL CtestDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: 在此添加专用代码和/或调用基类
if(pMsg->message==WM_KEYUP)//WM_KEYDOWN判断是否有按键按下
//WM_KEYUP判断是否有按键弹起
{
switch(pMsg->wParam)
{
case VK_DOWN://表示是方向键中的向下的键
AfxMessageBox(_T("下"));
break;
case VK_UP://表示是方向键中的向上的键
AfxMessageBox(_T("上"));
break;
case VK_SHIFT://表示是SHIFT键
AfxMessageBox(_T("SHIFT"));
break;
case VK_CONTROL://表示是CONTROL键
AfxMessageBox(_T("CONTROL"));
break;
case VK_F2://表示是F2键
AfxMessageBox(_T("F2"));
break;
default:
break;
}
}
return CDialogEx::PreTranslateMessage(pMsg);
}