码迷,mamicode.com
首页 > 其他好文 > 详细

MFC 三种消息

时间:2014-06-12 20:52:53      阅读:318      评论:0      收藏:0      [点我收藏+]

标签:style   class   blog   http   color   com   

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


②、一般情况下,一个MFC的消息映射在程序中有三处相关信息:1》消息响应函数的声明 2》消息响应函数实现 3》用来关联消息和消息响应函数的宏 具体见示例代码……更为详细的讲解参见《深入浅出MFC 第二版 简体中文版》 - 侯杰:http://www.cctry.com/thread-192-1-1.html
③、针对不同的 Windows 消息,MFC提供了不同的消息映

射宏,主要分为如下六类:


1、Windows 消息映射宏 Windows 消息映射宏用于处理普通的窗口消息。此类消息映射宏前缀为“ON_WM_”,并且没有参数;


2、命令消息映射宏 命令消息 WM_COMMAND 是一种特殊的窗口消息,它从一个窗口发送到另一个窗口,以处理来自用户的请求,是 ON_COMMAND 宏和 ON_COMMAND_RANGE 宏;


3、控件通知消息映射宏 控件通知消息是指控件窗口发送到其父窗口的消息,其消息映射宏为 ON_CONTROL 和 ON_CONTROL_RANGE,有时在程序中并不见 ON_CONTROL 宏,而见 ON_BN_CLICKED 宏, 其实 ON_CONTROL 宏派生出许多的映射宏,包括 ON_BN_CLICKED 宏等;


4、控件通知消息映射宏 控件通知消息映射宏处理的窗口消息有 WM_COMMAND,WM_NOTIFY,其消息映射宏有 ON_NOTIFY 和 ON_NOTIFY_RANGE;


5、反射消息映射宏 反射消息是指子窗口向父窗口发送的通知消息或控件通知消息,父窗口将该消息转化为相应的反射消息发送给子窗口优先处理。 处理窗口消息 WM_NOTIFY+WM_REFLECT_BASE 的宏是 ON_NOTIFY_REFLECT,处理窗口消息 WM_COMMAND+WM_REFLECT_BASE 的宏是 ON_CONTROL_REFLECT, 还有其他的反射消息宏,具体请参考MDSN。


6、扩展消息映射宏 有 ON_COMMAND | ON_COMMAND_RANGE | ON_NOTIFY | ON_NOTIFY_RANGE ……

④、自定义消息的发送与响应:

1、自定义消息号:#define WM_CCTRY_MSG (WM_USER+100)

2、在头文件中添加消息响应函数的声明:afx_msg LRESULT OnCcTryMsg(WPARAM wParam, LPARAM lParam);

3、在CPP文件中添加消息响应函数的实现: LRESULT CXXXDlg::OnCcTryMsg(WPARAM wParam, LPARAM lParam) { //相关代码; }

4、在 BEGIN_MESSAGE_MAP 与 END_MESSAGE_MAP 之间加入消息的映射代码:ON_MESSAGE(WM_CCTRY_MSG, &CDlgTestDlg::OnCcTryMsg)

5、消息的发送:

 

消息反射解释

 

父窗口将控制子窗口发给它的通知消息,首先反射回子窗口进行处理(即给控制子窗口一个机会,让控制子窗口处理此消息),这样通知消息就有机会能被子窗口自身进行处理。

 

MFC中引入消息反射的原因

 

在Windows的消息处理中,控制子窗口的发给其父窗口的通知消息只能由其父窗口进行处理,这使得控制子窗口的自身能动性大大降低(你想,它连改变自己的背景色,处理一个自身滚动问题都要其父窗口来完成),为了解决这个问题,在MFC中引入了反射消息“Reflect Message”的概念,进行消息反射,可以使得控制子窗口能够自行处理与自身相关的一些消息,增强了封装性,从而提高了控制子窗口的可重用性。

 

MFC 三种消息,布布扣,bubuko.com

MFC 三种消息

标签:style   class   blog   http   color   com   

原文地址:http://www.cnblogs.com/Yogurshine/p/3781565.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
分享档案
周排行
mamicode.com排行更多图片
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!