1. 程式人生 > >MFC 對話方塊Dialog響應鍵盤事件(組合鍵Ctrl+A)

MFC 對話方塊Dialog響應鍵盤事件(組合鍵Ctrl+A)

在上一篇文章的基礎上,這裡描述如何捕獲組合鍵,這裡以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); }