MFC的MESSAGE_MAP

    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出来的时候是什么年代,那个年代计算机的内存还比较小,这样想,当时的这样设计确实能够省不少空间,当然这是相对于大的应用软件来说的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值