函数介绍
都是个人理解,如果有不对的地方,欢迎指正
PreTranslateMessage(MSG* pMsg)
MFC中当消息发送给窗口的消息映射表分发之前,会先触发该函数对消息进行预处理
主要作用
在预处理函数中可以拦截一些特殊的消息,例如键盘消息、鼠标消息等。
它可以用来拦截并处理这些消息,以实现一些自定义的行为。
例如:键盘的上下左右的按下或者弹起.
触发和拦截
函数的返回值是一个布尔值,用于指示消息是否被处理。
如果返回TRUE,则表示消息已经被处理,将不再传递给消息映射表中的消息处理函数;
如果返回FALSE,则表示消息未被处理,将继续传递给消息映射表进行处理。
代码演示
BOOL CtestDlg::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message == WM_KEYDOWN) {// 当按下一个键时,程序会收到一个WM_KEYDOWN消息,
switch (pMsg->wParam) {//并且可以查看wParam和lParam参数来确定哪个键被按
case VK_LEFT: {
TRACE(_T("左键\n"));
break;
};
case VK_RIGHT: {
TRACE(_T("右键\n"));
break;
};
case VK_UP: {
TRACE(_T("上键\n"));
break;
}
case VK_DOWN: {
TRACE(_T("下键\n"));
break;
}
}
}
return CDialogEx::PreTranslateMessage(pMsg);
}
组合键检查
GetKeyState();
该函数可以检测指定按键的状态.
例如Ctrl摁下被触发了.调用该函数再检测I 和K 键的状态,如果都属于被摁下状态
就是一个三键的组合键被触发.