在上一篇文章的基础上,这里描述如何捕获组合键,这里以Ctrl+A为例
做法就是按下Ctrl的时候用一个静态成员变量保存Ctrl是否被按下,当Ctrl按下的时候设置为true;当Ctrl键抬起的时候设置为false
其他组合键的开发用此例举一反三即可。
头文件声明
BOOL PreTranslateMessage(MSG* pMsg);
源文件定义
BOOL CmfcDlg::PreTranslateMessage(MSG* pMsg)
{
static bool m_ctrl_down = false;//此函数第一次调用的时候初始化
if (pMsg->message == WM_KEYDOWN)
{
switch (pMsg->wParam)
{
//VK_A - VK_Z are the same as ASCII 'A' - 'Z' (0x41 - 0x5A) 不区分大小写
case 'A'://Ctrl + A
if (m_ctrl_down)
{
AfxMessageBox(_T("Ctrl + A key down"));return TRUE;
}
break;
case VK_CONTROL:
m_ctrl_down = true;return TRUE;
default:
return TRUE;
}
}
if (pMsg->message == WM_KEYUP)
{
switch (pMsg->wParam)
{
case VK_CONTROL:
m_ctrl_down = false; return TRUE;
}
}
return CDialogEx::PreTranslateMessage(pMsg);
}