MFC 對話方塊Dialog響應鍵盤事件(組合鍵Ctrl+A)
阿新 • • 發佈:2019-02-12
在上一篇文章的基礎上,這裡描述如何捕獲組合鍵,這裡以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);
}