MFC對話框程序屏蔽回車與ESC鍵

=============================================================
標題:MFC對話框程序屏蔽回車與ESC鍵
摘要:
備註:Windows XP + VC2005
日期:2010.8.3
姓名:朱銘雷
=============================================================
    MFC下基於對話框的程序,默認的會有一個“確定”按鈕,還有一個“取消”按鈕,那個“確定”按鈕是默認按鈕。這時候運行程序,按下回車鍵或者ESC鍵,程序都會退出。

   
    取消掉“確定”按鈕的Default Button屬性,按回車鍵程序依然會退出,即使把“確定”按鈕刪除掉,效果也是一樣。看了下《Inside Visual C++》。引用一下書中的原話:“當用戶按下Enter鍵時,Windows就會自動去查找“輸入焦點”落在了哪一個按鈕上,獲得焦點的按鈕的四周將被點線矩形框所包圍。如果所有按鈕都沒有獲得輸入焦點,Windows就會自動去尋找程序或資源所指定的默認按鈕。如果對話框沒有默認按鈕,那麼即使對話框中沒有“確定”按鈕,OnOK函數也會自動被調用”
    有的時候肯定是不想在按下回車鍵之後退出對話框程序,ESC也是一樣。解決方法也很簡單,重載對話框的PreTranslateMessage函數,然後在該函數中幹掉ESC和回車這兩個按鍵的消息。
    如:
BOOL CDialog1::PreTranslateMessage(MSG* pMsg)
{
       // TODO: 在此添加專用代碼和/或調用基類
       if (pMsg->message == WM_KEYDOWN)
       {
              switch (pMsg->wParam)
              {
              case VK_RETURN:
                     //MessageBox(_T("回車鍵按下"));
                     return TRUE;
              case VK_ESCAPE:
                     //MessageBox(_T("ESC鍵按下"));
                     return TRUE;
              default:
                     break;
              }
       }
       return CDialog::PreTranslateMessage(pMsg);
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章