MFC中基于對話(huà)框程序快捷鍵的實(shí)現
作者:蒼竹先生
下載源代碼
MFC中基于SDI和MDI的程序,默認情況下有快捷鍵資源,直接建立快捷鍵與消息的映射,就能實(shí)現程序的快捷鍵,而基于對話(huà)框的程序默認情況下沒(méi)有快捷鍵資源,鑒于網(wǎng)友問(wèn)到這個(gè)問(wèn)題,下面我就分別用兩種方法來(lái)實(shí)現。
一是在PreTranslateMessage函數中,判斷鍵盤(pán)的按鍵消息,比如快捷鍵是Ctrl + Q,我們就檢測按鍵消息的Ctrl鍵和Q是否同時(shí)按下就可以了。
//用PreTranslateMessage的方法,判斷Ctrl+Q是否按下,按下就執行快捷鍵對應的操作if(pMsg->message == WM_KEYDOWN && pMsg->wParam == 'Q' && IsCTRLPressed()){ AfxMessageBox("Ctrl + Q 被按下"); return TRUE;}
HACCEL hAcc;hAcc = LoadAccelerators(AfxGetApp()->m_hInstance, MAKEINTRESOURCE(IDR_ACCELERATOR1));在PreTranslateMessage函數中進(jìn)行快捷鍵的翻譯,如果是WM_KEYDOWN和WM_SYSKEYDOWN消息就翻譯,翻譯成功返回TRUE。
BOOL CAccelerator2Dlg::PreTranslateMessage(MSG* pMsg) { // TODO: Add your specialized code here and/or call the base class int iResult; //針對WM_KEYDOWN消息和WM_SYSKEYDOWN消息,翻譯快捷鍵 switch(pMsg->message) { case WM_KEYDOWN: case WM_SYSKEYDOWN: iResult = TranslateAccelerator(m_hWnd,hAcc,pMsg); //翻譯快捷鍵成功,返回TRUE if(iResult) return TRUE; } return CDialog::PreTranslateMessage(pMsg);} 下面處理快捷鍵對應的響應,在該實(shí)例中,快捷鍵表中建立了Ctrl +Q,Shift + Q,Alt + Q,Ctrl + Shift + Q,Ctrl + Alt + Q,Shift + Alt + Q,Ctrl + Shift + Alt + Q六個(gè)快捷鍵分別進(jìn)行測試。void CAccelerator2Dlg::OnCtrlQ() { // TODO: Add your control notification handler code here AfxMessageBox("你按下了定義的快捷鍵"); }
聯(lián)系客服