消息路由 以及 消息映射与虚函数实现的分析

win32 实现一个应用程序:

设计  注册  创建 显示 更新  消息循环

消息: 操作系统将每个事件都包装成一个称为消息的结构体MSG来传递给应用程序。

MFC 类库把功能封装成类,然后把许多全局函数制作成文件在链接过程中链接到程序中,完成整个程序的链接...

所以,MFC程序的入口函数是WinMain函数。

CWinApp  theApp;//代表应用程序本身... 全程序有且只有一个theApp对象.

________________________________________________

消息处理及路由分析

程序在后台维护着一个c++资源的句柄和类对象的映射表。。

当有消息到来时,编译器会通过映射表把消息和相应的类关联,通过消息循环最终调用WindowProc函数,对消息处理。。。实现OnCmdMsg实现消息处理

每个类都会有一个如下的消息关联表(消息与处理函数的关联表) 。于是,就遍历其关联表找到处理函数执行。如果没有找到,那么就牵涉到消息路由的问题。

消息处理:

BEGIN_MESSAGE_MAP

END_MESSAGE_MAP

消息路由:

OnCmdMsg的处理过程分析:

系统把消息分为三类:1、标准消息(WM_CREATE、WM_DRAW等等);2、命令消息(也就是菜单消息);3、通告消息(WM_Notify);

a、处理标准消息时,如果不能在关联类中找到处理函数,那么只会在其基类中去路由。路由顺序:CView-->CFrameWnd-->CCmdTarget

b、处理命令消息时,路由顺序:CView -->CDocument-->CFrameWnd-->CWinApp-->CCmdTarget

__________________________________________________

消息映射与虚函数实现的分析

为什么没有用虚函数实现消息映射,而用消息宏实现消息映射?

1、侯捷所言:内存的消耗考虑;

2、可扩展性的考虑,因为以后如果有新的消息加入,那么需要修改类库源码,而这个宏机制实现就不存在这个问题;

3、管理的考虑。如果用虚函数实现,那么需要为每个类添加其所有的消息响应函数,但是实际上程序中每次只需要用到许多消息中的少几种消息即可,这样虚函数实现会存在大量的浪费问题,而宏机制实现就不在这个问题。

参考链接:http://blog.csdn.net/zdl1016/article/details/4813193

 

 

 

原文链接: https://www.cnblogs.com/xuxu8511/archive/2012/04/17/2454067.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    消息路由 以及 消息映射与虚函数实现的分析

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/47719

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月8日 下午11:42
下一篇 2023年2月8日 下午11:43

相关推荐