2014-08-16 12:16:14|?次阅读|上传:huigezrx【已有?条评论】发表评论
关键词:C/C++, MFC, 界面设计|来源:唯设编程网
想必大家都都知道,MFC实现的对话框在默认情况下按ESC键会将对话框关闭,但有时候这不是我们想要的效果,我们希望用户按下ESC键的时候不直接关闭对话框,或者在关闭之前给予用户提示。本文介绍该功能的实现方法。
首先我们介绍CDialog的PreTranslateMessage函数,PreTranslateMessage是消息在送给TranslateMessage函数之前被调用的,绝大多数本窗口的消息都要通过这里,当你需要在MFC之前处理某些消息时,常常要在这里添加代码。MFC消息控制流最具特色的地方是CWnd类的虚拟函数PreTranslateMessage(),通过重载这个函数,我们可以改变MFC的消息控制流程,甚至可以作一个全新的控制流出来。
实现屏蔽ESC按键的基本原理就是:在PreTranslateMessage函数中进行判断,如果传送的消息是按键消息并且对应的按键是ESC,那么我们将该函数直接返回,而不是调用父类CDialog的PreTranslateMessage继续传递消息。
下面是实现屏蔽ESC按键关闭对话框的基本步骤:
1、点击ClassWizard,在Message Maps选项卡中左侧Object IDs中选择当前对话框,右侧的Messages中双击PreTranslateMessage,然后点击右侧的Edit Code按钮打开代码编辑窗口。
2、在PreTranslateMessage中添加如下代码:
//27为ESC的键值,如果要屏蔽其他键,可修改这行代码 if(pMsg->message==WM_KEYDOWN && pMsg->wParam==27) return NULL; return CDialog::PreTranslateMessage(pMsg);
其中的27这个数字代表ESC键的键值,如果要屏蔽ENTER键,可将此数字修改成为ENTER键的键值即可。