本文轉自:http://blog.csdn.net/leichelle/article/details/7991371
建立好的MFC的對話框,按下Enter或Esc時,系統會調用”默認“事件處理函數,也就是OnOK(),倘若自己的CFormView子類或者CDialog子類沒有重寫OnOK()函數,則會調用父類的OnOK,其結果是關閉界面。要屏蔽Enter鍵或Esc退出的功能,只需要將在CDialog中重寫ONOK()函數即可。而要實現默認爲“確定”功能,下面兩種方法供參考:
1.採用ClassWizard進行實現重載OnOK()
OnOK()
{
if(...)
{// 當是Enter或Esc按鍵事件時
.....
}
else
{ // 點擊關閉按鈕時
....
CDialog::OnOK();
}
}
2.採用ClassWizard進行實現重載PreTranslateMessage
在類視圖裏面選擇你要實現的類,右鍵屬性,在屬性裏面找到函數PreTranslateMessage,然後添加PreranslateMessage的消息函數,在PreTranslateMessage的消息函數中添加你要實現處理按鍵事件的代碼。
- /********************************************************
- * 方法名稱: PreTranslateMessage(MSG *pMsg)
- * 描述: 該方法主要是處理傳遞消息的,任何消息產生的消息都會經過這個方法處理,
- * 然後,消息纔會到達相應的應用程序中。
- * 調用模塊:CDialogEx::PreTranslateMessage(pMsg)父類的對應方法
- * 輸入: MSG類型的消息對象指針
- * 輸出: 無
- * 返回值: bool值
- *********************************************************/
- BOOL CSerialDlg::PreTranslateMessage(MSG* pMsg)
- {
- // TODO: Add your specialized code here and/or call the base class
- // 把Esc和Enter按鍵事件消息過濾掉,否則該消息會導致對應應用程序調用OnOK()方法,結束應用程序
- if (pMsg->message == WM_KEYDOWN)
- {
- switch(pMsg->wParam)
- {
- case VK_ESCAPE: //Esc按鍵事件
- return true;
- case VK_RETURN: //Enter按鍵事件
- return true;
- default:
- ;
- }
- }
- return CDialogEx::PreTranslateMessage(pMsg);
- }