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