01. PreTranslateMessage函数,常用于屏蔽MFC对话框中默认的Enter和ESC消息
函数原型:BOOL PreTranslateMessage(MSG* pMsg)
用法举例:
BOOL CTestDlg::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message == WM_KEYDOWN){
if(pMsg->wParam == VK_ESCAPE){
return TRUE;
}
if(pMsg->wParam == VK_RETURN){
return TRUE; // 对话框内部控件不可以接收到回车消息!!
}
}
return CDialog::PreTranslateMessage(pMsg);
}
02.响应系统按键
if(pMsg->message==WM_SYSKEYDOWN)
{
if(pMsg->wParam==VK_MENU)
MessageBox("alt");
}
if((pMsg->wParam==VK_F9) && (GetAsyncKeyState(VK_MENU)<0))
{
MessageBox(_T("同时按下了Alt键和F9键"));
}
GetAsyncKeyState()
=========================
功能:确定用户当前是否按下了键盘上的一个键
原型:SHORT GetAsyncKeyState(int vKey);
参数:nVirtKey指出要检查键的虚键代码。结果的高位指出该键当前是否被按下(是为1,否为0)。
常用键的VK值:
VK_SHIFT Shift键
VK_LSHIFT 左Shift键
VK_RSHIFT 右Shift键
VK_CONTROL Ctrl键
VK_LCONTROL 左Ctrl键
VK_RCONTROL 右Ctril键
VK_MENU Alt键
VK_LMENU 左Alt键
VK_RMENU 右Alt键
VK_LBUTTON 鼠标左键
VK_RBUTTON 鼠标右键
另一个函数GetKeyState与GetAsyncKeyState函数不同。GetAsyncKeyState在按下某键的同时调用,判断正在按下某键。
GetKeyState则在按过某键之后再调用,它返回最近的键盘消息从线程的队列中移出时的键盘状态,判断刚按过了某键。
与RegisterHotKey()相比,GetAsyncKeyState()的优点在于可以监控鼠标按键,缺点是需要使用定时器。