franksunny的个人技术空间
获得人生中的成功需要的专注与坚持不懈多过天才与机会。 ——C.W. Wendte

 

如何去除对话框默认的EnterEsc按键响应

 

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相关技术

FeedBack:
# re: 如何去除对话框默认的Enter和Esc按键响应
2010-08-10 15:51 | joke
谦虚使人进步!
博主写的蛮实用的  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理



常用链接

留言簿(13)

随笔分类

个人其它博客

基础知识链接

最新评论

阅读排行榜

评论排行榜