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