?
如何去除對話框默認的Enter和Esc按鍵響應
?
MFC
從簡化方便入手,為我們創建的對話框,都增加了一個缺省的
Enter
和
Esc
鍵響應,前者響應對話框的
IDOK
按鈕,后者響應
IDCANCEL
按鈕,但是有時我們創建的對話框不需要這個簡便的響應操作,奇怪的是我們在去除
IDOK
按鈕和
IDCANCEL
按鈕后還是實現不了禁止如上兩個缺省按鍵的響應。那么該如何實現呢,以下便是解決過程(以去除
Enter
鍵響應為例):
首先,利用
ClassWizard
為對話框的
IDOK
添加單擊響應函數,去除該函數中默認的
OnOK
函數響應,如下所示
void CDialogDemoDlg::OnOK()
{
????? CDialog::OnOK();
}
改為
void CDialogDemoDlg::OnOK()
{
????? //CDialog::OnOK();
}
注:進行如上這步后,顯然你不論再怎么按
Enter
鍵都無法使對話框退出了,但是也導致該對話框就算用戶用鼠標點擊
IDOK
按鈕也無法實現對話框默認的
OnOK
函數了。所以這一步只是解決了一個現象問題,本沒有真正解決問題。下面我們要恢復這個按鈕的功能。
?
其次,去除缺省按鈕。在資源視圖下,將
IDOK
按鈕屬性欄中的
Default button
屬性勾去。使得默認
Enter
鍵不再繼續響應該按鈕。
?
第三,恢復
OnOk
函數的功能。首先在資源視圖中,將
IDOK
按鈕的
ID
改變為
IDC_OK(
這里用戶根據需要可以自己設置資源的
ID)
;其次為其添加單擊響應函數,并在需要執行結束的代碼后添加
CDialog::OnOK()
函數,如下所示:
void CDialogDemoDlg::OnOk()
{
????? ......//
省其它處理代碼
????? CDialog::OnOK();
}
?
如上所述過程后,整個
Enter
鍵默認響應已經去除,而且也不會影響對話框正常響應
OnOK
函數的功能,在如上對話框處理后,如果
IDC_OK
按鈕的
TabOrder
屬性為
1
的話,按
Enter
鍵就相當于鼠標單擊
IDC_OK,
所以用戶必須在“
Layout
”的“
Tab Order
”下面重新布置
IDC_OK
按鈕的
TabOrder
順序。
也許細心的讀者會發現,有時當不用進行第三步操作時,直接將第一步
OnOK()
函數中注釋的
CDialog::OnOK()
代碼重新啟用,也是可以“完成”去除
Enter
鍵默認響應的特性,何必要進行第三步這么復雜的操作,其實不進行第三步操作,并非真正實現了去除
Enter
鍵響應,比如對話框上有一個
Edit
控件時,在編輯
Edit
結束后,用戶按下
Enter
鍵,程序就又馬上去響應
OnOK
函數了。
好了,去除對話框
Enter
鍵缺省響應的過程就介紹到這里,讀者可以試著去去除
Esc
鍵的響應。
(注,該方法本人也是書上得來,僅做個人總結)
?
posted on 2006-09-19 06:49
frank.sunny 閱讀(2412)
評論(1) 編輯 收藏 引用 所屬分類:
MFC相關技術