MFC對話框中處理Enter或Esc按鍵事件方法

 本文轉自: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的消息函數中添加你要實現處理按鍵事件的代碼。


  1. /******************************************************** 
  2. * 方法名稱: PreTranslateMessage(MSG *pMsg) 
  3. * 描述: 該方法主要是處理傳遞消息的,任何消息產生的消息都會經過這個方法處理, 
  4. * 然後,消息纔會到達相應的應用程序中。 
  5. * 調用模塊:CDialogEx::PreTranslateMessage(pMsg)父類的對應方法  
  6. * 輸入: MSG類型的消息對象指針 
  7. * 輸出: 無 
  8. * 返回值: bool值 
  9. *********************************************************/  
  10. BOOL CSerialDlg::PreTranslateMessage(MSG* pMsg)  
  11. {  
  12.     // TODO: Add your specialized code here and/or call the base class  
  13.     // 把Esc和Enter按鍵事件消息過濾掉,否則該消息會導致對應應用程序調用OnOK()方法,結束應用程序  
  14.     if (pMsg->message == WM_KEYDOWN)  
  15.     {  
  16.         switch(pMsg->wParam)  
  17.         {  
  18.             case VK_ESCAPE: //Esc按鍵事件  
  19.                 return true;  
  20.             case VK_RETURN: //Enter按鍵事件  
  21.                 return true;  
  22.             default:  
  23.                 ;  
  24.         }  
  25.     }  
  26.       
  27.     return CDialogEx::PreTranslateMessage(pMsg);  
  28. }  
發佈了21 篇原創文章 · 獲贊 19 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章