锐英源软件
第一信赖

精通

英语

开源

擅长

开发

培训

胸怀四海 

第一信赖

当前位置:锐英源 / 开源技术 / C++开源心得 / MFC消息机制与传统Windows消息处理机制的区别
服务方向
人工智能数据处理
人工智能培训
kaldi数据准备
小语种语音识别
语音识别标注
语音识别系统
语音识别转文字
kaldi开发技术服务
软件开发
运动控制卡上位机
机械加工软件
软件开发培训
Java 安卓移动开发
VC++
C#软件
汇编和破解
驱动开发
联系方式
固话:0371-63888850
手机:138-0381-0136
Q Q:396806883
微信:ryysoft

锐英源精品原创,禁止转载和任何形式的非法内容使用,违者必究


MFC为什么要用消息映射机制来实现消息路由?

 

常规实现消息路由的方式

从以往的经验,按面向对象框架来理解消息为一个框架接口,对于处理消息路由,可以在基类中针对每种消息定义一个接口虚函数。当子类需要对某个消息进行处理时,只需要重写基类相应的虚函数即可,通过这种方式就可以完成消息的路由。

常规方式的不足

这样做从原理上讲是没有问题的,但是从编程角度讲,是不可取的。为什么不可取?因为虚函数必须由一个虚函数表(vtable)来实现。在应用程序中使用的每个派生类,系统都要为它们分配一个vtable,并且不管基类中虚函数是否确实在派生类中被重写,这个vtable表中都要为基类的每一个虚函数提供一个 4字节的输入项。而我们知道,MFC中类的派生层次很多,这样做,将使MFC类及其派生类背着一个很大的虚拟函数表的包袱,这对内存资源是一种浪费。而且,每次扫描虚拟函数表也是非常消耗时间的操作,这种定义虚拟函数的做法显然是不合适的。所以MFC没有采用虚拟函数这种机制,而是采用一种称之为消息映射的机制来完成消息路由。

消息映射机制解决传统方式缺陷的思路

MFC消息映射机制的具体实现方法是:在每个能接收和处理消息的类中,定义一个消息和消息函数静态对照表,即消息映射表。在消息映射表中,消息与对应的消息处理函数指针是成对出现的。某个类能处理的所有消息及其对应的消息处理函数的地址都列在这个类所对应的静态表中。当有消息需要处理时,程序只要搜索该消息静态表,查看表中是否含有该消息,就可知道该类能否处理此消息。如果能处理该消息,则同样依照静态表能很容易找到并调用对应的消息处理函数。

友情链接
版权所有 Copyright(c)2004-2021 锐英源软件
公司注册号:410105000449586 豫ICP备08007559号 最佳分辨率 1024*768
地址:郑州大学北校区院(文化路97号院)内