消息映射机制,本身靠的是一个消息与消息函数的静态对照表
Build命令
Build命令
的功能是编译并链接应用程序(快捷键是F7)
为类添加响应消息的函数(方法二):ClassWizard
(建立类向导)
其中最重要的是MessageMaps选项卡,Objects IDs列表框列出当前选择的类所包含的所有资源的ID号,列表中的第一项决是当前的类名;可以添加消息处理函数、成员函数,还可以删除成员函数,对成员函数进行编辑;
Automation选项卡是什么
删除消息响应函数时一定要彻底,在头文件
和源文件
中都有相关的内容,不用手工删除。
一个MFC消息响应函数在程序中有三处相关信息:函数原型
(头文件中)、关联消息和消息响应函数的宏
(源文件中)和消息响应函数
的实现(源文件中)
头文件
中在两个AFX_MSG
注释宏之间的是消息响应函数的声明;
源文件
中在AFX_MSG_MAP
注释宏之间的消息映射宏
,把消息和响应函数关联起来;
源文件中消息响应函数的实现代码,这种方式称为消息映射机制。
消息路由的实现方式可以有多种:比如在基类中针对每种消息定义一个虚函数(这样的话需要维护一个虚拟函数表,会有比较大的内存包袱)
消息过程
消息映射机制是通过OnWndMsg
函数实现的,过程为:
先判断消息是否有消息响应函数(先到头文件查看两个AFX_MSG
注释宏之间是否有原型声明;再到源文件查看BEGIN_MESSAGE_MAP
和END_MESSAGE_MAPS
宏之间是否是映射宏)
如果有消息响应函数,则调用该函数完成相应的功能。