MFC的MESSAGE_MAP
来源:互联网 发布:部落冲突法师数据 编辑:程序博客网 时间:2024/05/29 07:30
MFC的消息处理机制用了三个宏来实现,首先是在头文件中定义DECLARE_MESSAGE_MAP,然后在实现文件中(.cpp)中定义BEGIN_MESSAGE_MAP(theClass, baseClass)和END_MEESAGE_MAP()。然后在这两个宏中间用一系列的宏来映射消息处理的函数,如ON_WM_PAINT()、ON_WM_CREATE()等等。
仔细分析这几个宏的实现发现,其实完成的就是这样一件事情:消息传递。首先看自己的类有没有处理某一个消息,如果没有就去基类的消息映射表里面找有没有函数处理这个消息,以此类推,一直推到CCmdTarget类,如果还没有,就调用windows默认的处理函数处理。其实绕来绕去,搞得这么复杂,说白了就是MFC自己实现了虚函数的机制。这种东西完全可以用虚函数来实现,搞不懂MFC为什么要搞这么复杂,而现在我们用的SDK框架,也确实用了虚函数来做这些事情,看起来清楚明了多了,也更容易理解。
《深入浅出MFC》里面给出的理由是为了节省内存,在第417页的下面有解释,说实话,我不认为搞这么能节省多少空间,每个类才一个虚表,就算一个工程有1000类要处理消息,需要处理的消息有1000种,在虚表上占用的内存也才4M而已(我应该没算错吧?)。当然,MFC出来的时候是什么年代,那个年代计算机的内存还比较小,这样想,当时的这样设计确实能够省不少空间,当然这是相对于大的应用软件来说的。
- MFC的MESSAGE_MAP
- MESSAGE_MAP
- MFC中消息映射MESSAGE_MAP宏
- MFC 消息映射 消息传递MESSAGE_MAP 读深入浅出MFC感悟
- 深入浅出MFC:MFC的MessageMaping
- mfc activeX,mfc application,mfc dll三者的区别
- MFC教程(7)-- MFC的DLL
- MFC类库的主要组成---MFC
- MFC-最简单的MFC程序
- 制作带MFC界面的MFC DLL
- 【MFC】在MFC中PreTranslateMessage()的使用方法
- 【MFC图片显示】MFC的位图显示
- 【MFC】:MFC中列表的使用
- [MFC]MFC中变量数组的问题
- 深入浅出MFC:MFC的消息机制
- 深入浅出MFC:MFC中的的RTTI实现
- 深入浅出MFC:MFC的CommandRouting(命令传递)
- MFC之MFC的初始化过程
- 程序员面试宝典。。。突破心理防线
- IP包的生成和发送接口(转载)
- JAVA中的接口和抽象类的区别
- 数据包在Linux中的流程(转载)
- Linux内核修改(转载)
- MFC的MESSAGE_MAP
- ECSHOP init.php解读
- 套接字IO模型(三) WSAEventSelect模型
- 套接字IO模型(三) WSAEventSelect模型
- C#、SQL位运算整理
- UDP的传输功能
- SGI-STL学习笔记之list::sort()
- 磁珠
- ASSCESS 更新中的子查询