virtual BOOL PreTranslateMessage(MSG* pMsg)
          ?{
          ????
          ???return CWindow::IsDialogMessage(pMsg);
          ?}

          改成:


          virtual BOOL PreTranslateMessage(MSG* pMsg)
          ?{
          ??if(pMsg->message == WM_KEYDOWN?? &&?? pMsg->wParam == VK_ESCAPE)???? return?? TRUE;??
          ??if(pMsg->message == WM_KEYDOWN?? &&?? pMsg->wParam == VK_RETURN)???? return?? TRUE;????
          ??else????
          ???return CWindow::IsDialogMessage(pMsg);
          ?}

          ---------------------------------------------

          MFC:
          BOOL?? CxxxDlg::PreTranslateMessage(MSG*?? pMsg)????
          ? {??
          ??? if(pMsg->message==WM_KEYDOWN?? &&?? pMsg->wParam==VK_ESCAPE)???? return?? TRUE;??
          ??? if(pMsg->message==WM_KEYDOWN?? &&?? pMsg->wParam==VK_RETURN)?? return?? TRUE;????
          ??? else????
          ????????? return?? CDialog::PreTranslateMessage(pMsg);??
          ? }

          --------------------
          在一般情況下編寫的對話框程序,用戶在運行的時候,如果不注意按下了ENTER或者ESC鍵,程序就會立刻退出,之所以會這樣,是因為按下Enter鍵時,Windows就會自動去找輸入焦點落在了哪一個按鈕上,當獲得焦點的按鈕的四周將被點線矩形包圍。如果所有按鈕都沒有獲得輸入焦點,Windows 就會自動去尋找程序或資源所指定的默認按鈕(默認按鈕邊框較粗)。如果對話框沒有默認按鈕,那么即使對話框中沒有OK按鈕,OnOK函數也會自動被調用,對于一個普通的對話框程序來說,OnOK函數的調用,以為著程序會立刻退出。為了使Enter鍵無效,最簡單的辦法就是將CExDlg的OnOK函數寫成空函數,然后針對OK按鈕寫一個新的函數來響應。ESC鍵的原理也是如此,它是默認和OnCancel函數映射在一起的。對于ESC鍵,需要自己重載 CDialog類的PreTranslateMessage函數,當發現是ESC鍵的時候,過濾掉這個消息或者是替換掉這個消息。??
          ???
          ?

          posted on 2009-06-16 15:43 -274°C 閱讀(2666) 評論(0)  編輯  收藏 所屬分類: C++

          常用鏈接

          留言簿(21)

          隨筆分類(265)

          隨筆檔案(242)

          相冊

          JAVA網站

          關注的Blog

          搜索

          •  

          積分與排名

          • 積分 - 916114
          • 排名 - 40

          最新評論

          主站蜘蛛池模板: 武功县| 罗平县| 象州县| 吉林省| 二连浩特市| 永新县| 兴海县| 革吉县| 平乐县| 大宁县| 西丰县| 黔江区| 长丰县| 嘉兴市| 锡林郭勒盟| 齐河县| 宜阳县| 宜都市| 孟津县| 梨树县| 阳原县| 屯昌县| 施秉县| 鄄城县| 黎城县| 牟定县| 古田县| 徐水县| 潞城市| 内黄县| 秦安县| 阿城市| 临泽县| 霍林郭勒市| 淳安县| 天峻县| 巴林右旗| 乐昌市| 保德县| 咸丰县| 确山县|