ON_MAND(ID_FILE_OPEN; CWinApp::OnFileOpen)
// Standard print setup mand
ON_MAND(ID_FILE_PRINT_SETUP; CWinApp::OnFilePrintSetup)
END_MESSAGE_MAP()
MFC AppWizard 生成的应用程都已经自动包含消息映射的代码,但用户也可以在源程序
中手动添加。同时 Visual C++另一个强大的工具 ClassWizard 也提供了处理消息映射表的自动
化机制。当然,ClassWizard 只能够生成类和消息处理的框架,包括创建消息处理函数的声明,
而具体的实现代码还需要用户去补充。
在类中,消息处理函数都是类的成员函数 。当程序要对一个消息进行响应时,消息映射
机制就会自动调用该函数。用 ClassWizard 添加消息处理函数时,会自动添加以下 3 部分内
容:
o 在类的定义中添加该消息处理成员函数的函数声明;
o 在类的消息映射表中加入相应的消息映射表项;
o 在类的实现中加入该消息处理成员函数的函数实现。
注意 ClassWizard 添加的函数实现中,只是一个不能完成任何操作的空函数框架,还需
要加入具体的实现代码。但当用户手动添加消息处理函数时,也必须添加上述 3 部分内容。
对于标准 Windows 消息,在 CWnd 类中已经预定义了默认的处理函数,有确定的函数名,
一般以 On 开头,以消息名为函数名的后半部分,例如 WM_PAINT 消息的处理函数为
OnPaint(),WM_CREATE 消息处理函数是 OnCreate() 。这些预定义的消息处理函数根据消息
的不同有不同的参数和返回值。
对于控件通知消息和命令消息,一般没有默认的消息处理函数,可以由用户自定义。MFC
建议这类函数命名应遵循一些约定,一般以 On 开头,函数名中应包含该消息的简要说明,
ClassWizard 在创建这类消息处理函数时会提供一个建议的函数名,一般无需
方便阅读代码。
修改。例如 OnFileOpen()函数表明处理命令标识符 ID_FILE_OPEN 的命令消息。
本章和以后的章节都将主要利用 ClassWizard 为程序添加消息处理函数。因此下面简要
介绍一下 ClassWizard 对话框,如图 3…1 所示。在 IDE 主菜单栏中选择“View|ClassWizard ”
菜单命令,或者在开发环境的界面中直接按快捷键 Ctrl+W,即可打开“MFC ClassWizard ”
对话框。选择“Message Maps ”的选项卡,即可进行编辑消息映射的设置。
·44 ·
…………………………………………………………Page 54……………………………………………………………
第 3 章 菜单与加速键
图 3…1 消息映射选项卡
ClassWizard 对话框的“Message Maps ”(消息映射)选项卡中的各项功能介绍如下:
o Project (工程)下拉列表框:用于选择需要编辑的工程名称。
o Class name (类名)下拉列表框:用于选择需要编辑消息映射的类的名称。选择好类
后,在该下拉列表框 和“Project ”下拉列表框的下一行将显示所选类的头文件和源文
件路径。
o Object IDs (对象ID )列表框:以列表形式显示可以产生消息的对象的 ID,包括菜单
项、按钮等的 ID 。该列表框的第一项总是显示所选择的类。
o Messages (消息)列表框:列举在“Object IDs ”列表框中选定的对象所能产生的各种
消息。
o Member functions (成员函数)列表框:以列表形式显示选定的类中的成员函数。该列
表框中只列出与消息处理函数以及 MFC 中与消息处理有关的虚函数。前者标记为
“W ”,并在函数名后显示对应的消息映射宏;后者标记为“V ”。
o Add Class (添加类)按钮:单击该按钮,添加新的类到工程中。该按钮在“MFC
ClassWizard ”对话框中的所有选项卡中都存在。
o Add Function (添加函数)按钮:单击该按钮添加选定消息的新的消息处理函数,包
括在消息映射定义中添加对应的宏指令,在选定的类中添加该消息处理函数的声明和
完成基本功能的代码实现。如果选定的消息已经有消息处理函数,则该按钮无效。对
于对象产生的消息,单击该按钮将弹出如图 3…2 所示的对话框,要求用户输入消息处
理函数的名称,在“Member function name ”(成员函数名称)输入框中输入函数名,
确定后 ClassWizard 就会自动添加该消息处理函数。对于由该选定的类产生的消息,
MFC 已经定义好了消息处理函数名称,单击“Add Function ”按钮将直接添加该消息
处理函数,不会提示用户输入自定义的函数名。注意,只有单击“MFC ClassWizard ”
的“OK ”按钮或者“Edit Code ”按钮退出“MFC ClassWizard ”对话框后,ClassWizard
才会真正修改源文件。
·45 ·
…………………………………………………………Page 55……………………………………………………………
Visual C++ 6。0 程序设计从入门到精通
图 3…2 添加消息处理函数的对话框
o Delete Function (删除函数)按钮:单击该按钮删除选定消息的消息处理函数,包括函
数的声明和定义该消息映射的宏语句。如果选定的消息没有消息处理函数,则该按钮
无效。注意,当该函数已经存在于源文件中时,单击该按钮会提示如图 3…3 所示的对
话框,告诉用户 ClassWizard 只能删除该函数的声明和定义该消息映射的宏语句,而
无法删除该函数的实现代码,用户需要手动删除。
图 3…3 提示用户手动删除消息处理函数的对话框
o Edit Code (编辑代码)按钮:单击该按钮退出“MFC ClassWizard ”对话框,同时 IDE
的代码编辑窗口直接转到选定消息的处理函数进行编辑。该按钮也使得在“MFC
ClassWizard ”中所做的更改生效。如果选定的消息没有消息处理函数,则该按钮无效。
o OK (确定)按钮:单击该按钮使得在“MFC ClassWizard ”中的编辑生效,并退出“MFC
ClassWizard ”对话框。
o Cancel (取消)按钮:单击该按钮取消所有“MFC ClassWizard ”对话框中的设置,并
退出“MFC ClassWizard ”对话框。
3。1。3 消息处理过程
在 Windows 程序设计中,消息的处理是通过消息循环进行接收与分发的。MFC 运用消
息映射机制封装了这一处理过程。下面介绍 MFC 中消息的处理过程。
1.标准 Windows 消息和控件通知消息
标准 Windows 消息和控件通知消息的处理过程比较简单。这类消息必须由 CWnd 或其派
生类的对象处理,消息传递到封装对应的窗口或子窗口的类的对象中。也就是说,当关闭程
序的时候,会产生一个 WM_CLOSE 消息并通知主框架类,主框架类调用相应的处理函数进
行程序关闭前的清理操作,如保存文件和数据等。
2 .命令消息
命令消息与其他两个类型的消息不同,它可以由应用程序其他类的对象(例如应用类对
象、文档对象和文档模板对象)处理。这就涉及一个消息传递路径的问题,具体来说就是允
·46 ·
…………………………………………
小说推荐
- C语言游戏编程从入门到精通(PDF格式)
- -Page 1-Page 2-Page 3-Page 4-Page 5-Page 6-Page 7-Page 8-Page 9-Page 10-Page 11-Page 12-Page 13-Page 14
- 其他
- 最新章:第4章
- oracle从入门到精通(PDF格式)
- -Page 1-Oracle 从入门到精通-Page 2-资源来自网络,仅供学习 Oracle 从入门到精通一、SQL 8
- 其他
- 最新章:第37章
- php程序设计简明教程(DOC格式)
- -Page 1-PHP 程序设计简明教程PHP 讲义 第 1 页 共 90 页-Page 2-目录序 4第一章 PHP 简介 6
- 其他
- 最新章:第31章
- VB2008从入门到精通(PDF格式英文版)
- -Page 1(R)The eXperT’s Voice inBeginningVB 2008From Novice to ProfessionalChristian Gross-Page 2-Page 3-Beginning VB 2008From Novice to Professional■C
- 其他
- 最新章:第214章
- C语言设计
- 作者:谭浩强1 C 语言概述1.1 C语言的发展过程1.2 当代最优秀的程序设计语言1.3 C语言版本1.4 C语言的特点1.5 面向对象的程序设计语言1.6 C和C+1.7 简单的C程序介绍1.8 输入和输出函数1.9 C源程序的结构特点1.10书写程序时应遵循的规则1.11C语言的字符集1.12
- 文学名著
- 最新章:第45章
- 设计成婚:不入豪门
- 作者:海未央《设计成婚2:名门新娘》作品介绍《名门新娘》介绍:她是骆家收养的孤女,性格因为受他的影响,变得有些古灵精怪,也懂得是非之分!他说他的一切只为他而努力,可是为什么要拒绝自己呢?什么?没有满十八岁?那今天生日,够十八岁了吧?什么,还太小?太过分了,这不是耍着自己玩吗?嘿嘿,有个邪恶的老师,那
- 魔法玄幻
- 最新章:第196章
- 玄学,从入门到放弃
- 《玄学,从入门到放弃》作者:李传言文案:周诣一手拿着卜卦,一手拿着《演员的自我修养,叹息良久。他本是百年前观天占星的玄术师,谁知却一朝重生现代。他只想平淡地生活下去,可天不遂人愿,他注定将在这末法时代掀起波澜!成就一代影帝!谢千仇沉默地看着他…大师,你卦和书都拿倒了#玄学,从入门到放弃,入土,删库跑
- 魔法玄幻
- 最新章:第86章
- C语言实例教程(PDF格式)
- -Page 1-前 言Visual C+是开发运行于Windows 95和Windows NT环境下的Win32应用程序的可视化编程工具中最重要的成员之一,它为软件开发人员提供了完整的编辑、编译和调试工具和建立于Win32 API(ApplicationProgramming Interface)基
- 其他
- 最新章:第143章
- 要你言听计从
- 作者:决明第一章哈士奇,没有护卫看家的本领,对主人、客人甚至是闯空门的恶人都一样友善,咬着皮球跟小偷一块玩你丢我捡也不用太惊讶,时常被人认为忠诚度不足。贺世祺背靠在冰冷玻璃落地窗前,一整间屋子都是伸手不见五指的黑暗,也好,反正他现在什么也不需要看到,只要耳朵还有听觉就好,顺便听听贴在耳边的手机里还要
- 都市言情
- 最新章:第28章