mfc消息路由
本篇文章给大家谈谈mfc消息路由,以及mfc添加消息处理函数对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
MFC里的消息映射具体是怎么实现的?命令消息和一般消息有什么区别?
通过一系列的宏定义如DECLARE_MESSAGE_MAP,建立了一个类别型录网。如果是一般消息,消息的路由是沿着父类这条线找到消息响应函数。如果是命令消息,有特定的消息路由。
建议你读一读侯俊杰(侯捷)写的《深入浅出MFC》。
VC++和MFC到底是什么关系
vc++是一款1998年推出的编译器(准确的说就是集成开发环境)。
mfc是一款应用程序框架,它的出现甚至比vc++更早,所有前一位说vc++包括mfc是不正确的。而且不光vc++,vs里也提供mfc。准确的说class
wizard才是vc或者vs特有的,class
wizard这个插件作为vc等ide的一个功能提供了代码补全的功能,让用户使用mfc进行编程时更便捷。
但是,因为mfc是开源的,理论上你可以参考它的代码(如果你真有那个闲情逸致的话)把它做一定修改移植到别的ide上去用,如果你更有心,还可以为你移植的那个ide开发一个类似class
wizard的插件,那么那个ide也可以使用mfc了。
至于说mfc只是做界面的,这有点狭隘了,首先windows
api就提供了界面的绘制功能,你不用mfc一样可以创作窗口程序,并在其上绘图。其次,mfc是应用程序框架,它封装了常用的windows
api,将其以一定层次呈现在用户面前。在编译器不支持rtti的情况下,mfc的开发者生生地使用他们的方法在这个框架中提供rtti,将windows的消息响应机制通过message
map(消息映射),message
routing(消息路由)更自然地呈现在用户面前,在c++对容器的支持不那么完善的情况下,提供了便捷的链表类。总而言之,mfc绝不仅仅是做界面的。
最后说一句,mfc确实凝聚了一帮微软大牛的技术结晶,可是毕竟是20年前的结晶,事实上现在确实差不多被淘汰了(vc++也是)。。。。
MFC菜单项消息处理问题
要注意菜单命令的消息路由:
活动视图---文档---框架---APP对象
你切分窗口却不能保证右方的为活动视图。所以不能相应,确定的就是,消息如果美誉在活动视图处理,那就会在文档对象里处理,如果还没有处理,那就给框架处理,依次类推。
你可以把消息放到框架进行处理,也可以固定设定右方的视图为活动视图(但这样不知道对你左边的视图是否影响过大)。
什么是消息路由?有哪两种主要方式
1.MFC中的消息分为三种
(1)标准消息,也叫窗口消息(例:WM_PAINT,WM_CREATE,WM_LBUTTONDOWN,WM_CHAR)
(2)命令消息,来自菜单,工具栏和加速键,都以WM_COMMAND表示
(3)控件消息,控件消息又分为三小类,第一类和标准消息格式一样,第二类和命令消息格式一样(不过多了一个控件窗口的句柄),第三类是WM_NOTIFY.其具体细节不是本文叙述的重点.
2.为什么要消息路由?什么叫消息路由?
如果像SDK那样,我们的程序只有一个窗口,一个窗口函数,那哪还有消息路由呢?所有的消息都有一个窗口函数来处理了。至所以要消息路由,是因为MFC程序中有CMyView,CMyDoc,CMyFrameWnd,CMyApp等,MFC框架要做的工作是给用户提供一个机会,让用户可以选择这些类当中的任意一个来处理我们的命令消息。
注意,消息路由主要是针对上述的第二类消息(命令消息)。对于第一类窗口消息,其消息的接收者是确定的,不需要路由。比如:对于WM_CREATE消息,处理这个消息的类就是产生这个消息的窗口,你不可能让CMyDoc,CMyFrame,CMyApp去处理CView的WM_CREATE消息,那根本不符合逻辑,MFC框架当然也不会让你那么做。而对于来自菜单,工具栏的命令消息,用户是有选择权的,用户可以选择其接收者为View,Doc,App,Frame等当中的任意一个。下面就详细说一下命令消息的路由过程,主要通过分析MFC源代码。
原文链接:
关于mfc消息路由和mfc添加消息处理函数的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。