①、利用 GetKeyState 函数获得某一按键的按下、弹起状态;
#define IsKeyPressed(nVirtKey) ((GetKeyState(nVirtKey) & (1<<(sizeof(SHORT)*8-1))) != 0)
#define IsKeyToggled(nVirtKey) ((GetKeyState(nVirtKey) & 1) != 0)
//用 PreTranslateMessage 的方法,判断 Ctrl+Q 是否同时按下:
if(pMsg->message == WM_KEYDOWN && pMsg->wParam == 'Q' && IsKeyPressed(VK_CONTROL)) {
AfxMessageBox("Ctrl + Q 组合键被按下");
return TRUE;
}
②、通过载入快捷键资源,并建立快捷键与消息映射的方法来实现:
1> 添加快捷键资源;
2> 修改快捷键资源中的组合键配置;
3> 添加响应函数声明,格式为:afx_msg void OnCtrlW();
4> 添加消息映射,格式为:ON_BN_CLICKED(ID_ACC_1, OnCtrlW) 或者 ON_BN_CLICKED(ID_ACC_1, &CMFCTestDlg::OnCtrlW)
5> 添加响应函数的实现:
void CMFCTestDlg::OnCtrlW()
{
MessageBox(_T("您按下了 Ctrl+W 键!"));
}