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

 

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

专题:Android  iPad jQuery Chrome OS

博客园首页  IT新闻  知识库  学英语  C++程序员招聘
标题  
姓名  
主页
验证码 *
内容(提交失败后,可以通过“恢复上次提交”恢复刚刚提交的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
[使用Ctrl+Enter键可以直接提交]
每天10分钟,轻松学英语
网站导航:



<2006年9月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

常用链接

留言簿(8)

随笔分类

随笔档案

文章分类

文章档案

个人其它博客

  • msn space上的个人空间
  • 自己经常写些随感的空间
  • 百度上的个人空间
  • 觉得百度很流行,而且访问比space顺利些,所以将自己喜欢的文章转移到百度博客
  • 移动世界
  • 现在自己对移动这个新兴的互联网很感兴趣,本来想在博客园发布些移动产业的东西,但是感觉非技术的,都是网络摘抄,所以就弄了个移动世界的博客站点。

基础知识链接

搜索

  •  

最新评论

阅读排行榜

评论排行榜