如何去除对话框默认的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 阅读(2401)
评论(1) 编辑 收藏 引用 所属分类:
MFC相关技术