普通按键继承虚函数 PreTranslateMessage
BOOL CXXDlg::PreTranslateMessage(MSG* pMsg)
{
if(WM_KEYDOWN == pMsg->message)
{
if(VK_ESCAPE == pMsg->wParam)
{
}
}
return CXX::PreTranslateMessage(pMsg);
}
或者重写 OnKeyDown
void CXXDlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
if(VK_ESCAPE == nChar)
{
}
}
而Alt特殊一些,需要WM_SYSKEYDOWN消息,并且可以区分左右Alt
BOOL CXXDlg::PreTranslateMessage(MSG* pMsg)
{
if(WM_SYSKEYDOWN == pMsg->message)
{
if(GetKeyState(VK_LMENU) & 0x8000)
{
//左边Alt
}
if(GetKeyState(VK_RMENU) & 0x8000)
{
//右边Alt
}
if(GetKeyState(VK_MENU) & 0x8000)
{
//Alt
}
}
return CXX::PreTranslateMessage(pMsg);
}
相应的
左右ctrl VK_LCONTROL,VK_RCONTROL
左右Shift VK_LSHIFT,VK_RSHIFT
左右Windows VK_LWIN,VK_RWIN