天天看點

MFC程式添加快捷鍵

MFC裡使用快捷鍵的原理:按鍵組合成一個COMMAND/COMMAND_UI消息放入消息隊列,然後程式對該消息進行處理。

1.添加Accelerator表(按鍵組合與消息的對應表)

MFC程式添加快捷鍵

編輯Accelerator表

MFC程式添加快捷鍵

修改表ID

在Resource View視窗修改表ID為 IDR_MYACCEL

2.添加消息處理

第一種:右鍵單擊Accelerator表選項,Add Event Handler

第二種:在程式其他地方處理,比如MenuBar、ToolBar及右鍵菜單消息進行中,隻要其中消息的ID與表中ID一緻即可

3.加載Accelerator資源

在OnInitDialog中:

HACCEL        m_hAccel;

m_hAccel = LoadAccelerators ( AfxGetResourceHandle(),MAKEINTRESOURCE(IDR_MYACCEL) );

4.激活快捷鍵

BOOL CXXXDlg::PreTranslateMessage(MSG* pMsg) 

{

    if ( NULL != m_hAccel && 

         pMsg->message >= WM_KEYFIRST  &&  pMsg->message <= WM_KEYLAST )

        {

                return TranslateAccelerator ( m_hWnd, m_hAccel, pMsg );

        }

    else

        return CDialog::PreTranslateMessage(pMsg);

}

TranslateAccelerator()函數試圖将按鍵組合成COMMAND消息并處理。

或者直接在函數内判斷按鍵的組合情況

BOOL CXXXDlg::PreTranslateMessage(MSG* pMsg) 

{

    if(pMsg->message == WM_KEYDOWN)

    {

            if(GetAsyncKeyState(VK_CONTROL)) //CTRL 按下

            {

                if( pMsg->wParam == 'C')     //C按下

                    OnCopy();

                if( pMsg->wParam == 'V')     //V按下

                    OnPaste();

                if( pMsg->wParam == 'L')     //L按下

                    OnClear();

                if( pMsg->wParam == 'A')    //A按下

                    OnSelectAll();

            }

    }

    else

        return CDialog::PreTranslateMessage(pMsg);

}