MFC響應快捷鍵


CDialog類的消息循環中去掉了TranslateAccelerator函數,因此不能響應熱鍵;同時由於對話框上可能有很多控件,且默認情況下這些子窗口已經截獲了焦點,因此鍵盤消息已經被控件捕獲了;同時為了實現控件焦點切換和對話框默認行為,  VK_TAB、VK_LEFT、VK_RIGHT、VK_UP、VK_DOWN、 VK_RETURN、VK_ESCAPE 等鍵已經被截獲處理,因此對話框沒有控件時仍然不能完全響應按鍵消息。對話框不能收到WM_KEYDOW,關鍵是基類的CDialog::PreTranslateMessage(pMsg)做了手腳,所以你必須在它做手腳之前做自己想做的事。
重載虛函數PreTranslateMessage
virtual BOOL PreTranslateMessage(MSG* pMsg);
BOOL CLocalApplicationPage::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
do 
{
if(pMsg->message != WM_KEYDOWN)
{
break;
}
const SHORT l_cnKeyState = 0x8000;
if(l_cnKeyState != (GetKeyState(VK_CONTROL) & l_cnKeyState))
{
break;
}
if(pMsg->wParam == 'C')
{
// do ctrl+c
}
else if(pMsg->wParam == 'V')
{
// do ctrl+v
}
} while (FALSE);
return CDialog::PreTranslateMessage(pMsg);
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM