请问各位高手 什么是消息反射

macrojj 2010-03-12 01:14:14
RT

在什么情况下 我要用消息反射? 什么消息都可以反射吗

能不能有个消息反射的例子。看了网上的资料,不是特别懂啊。

是要重载onnitify吗?

...全文
188 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
liyuxiang19841203 2011-07-25
  • 打赏
  • 举报
回复
消息反射就是:子在处理没事件时向父窗体发送消息,父窗体将此消息又发给子窗体,就是“子->父->子”的过程。
ct025028 2010-03-12
  • 打赏
  • 举报
回复
ON_NOTIFY_REFLECT 和ON_NOTIFY通告消息

ON_NOTIFY消息通知父窗口处理,ON_NOTIFY_REFLECT是在父窗口处理完后,子窗口自己处理消息
caixin99 2010-03-12
  • 打赏
  • 举报
回复
在Windows里面,子控件经常向父控件发送消息,例如很多子控件要绘制自己的背景,就可能向父窗口发送消息WM_CTLCOLOR。对于从子控件发来的消息,父控件有可能在处理之前,把消息返还给子控件处理,这样消息看起来就想是从父窗口反射回来一样,故此得名:消息反射。   消息反射的由来

  在Windows和MFC4.0版本一下,父窗口(通常是一个对话框)会对这些消息进行处理,换句话说,自控件的这些消息处理必须在父窗口类体内,每当我们添加子控件的时候,就要在父窗口类中复制这些代码,我们可以想象这是多么的复杂,代码是多么的臃肿!

  我们可以想象,如果这些消息都让父窗口类去做,父窗口就成了一个万能的神,一个臃肿不堪的代码机,无论如何消息的处理都集中在父窗口类中,会使父窗口繁重无比,但是子控件却无事可做,并且代码也无法重用,这对于一个程序员来讲是多么痛苦的一件事?!

  在老版本的MFC中,设计者也意识到了这个问题,他们对一些消息采用了虚拟机制,例如:WM_DRAWITEM,这样子控件就有机会控制自己的动作,代码的可重用性有了一定的提高,但是这还没有达到大部分人的要求,所以在高版本的MFC中,提出了一种更方便的机制:消息反射。

  通过消息反射机制,子控件窗口便能够自行处理与自身相关的一些消息,增强了封装性,同时也提高了子控件窗口类的可重用性。不过需要注意的是:消息反射是MFC实现的,不是windows实现的;要让你的消息反射机制工作,你得类必须从CWnd类派生。

  Message-Map中的处理

  如果想要处理消息反射,必须了解相应的Message-Map宏和函数原型。一般来讲,Message-Map是有一定的规律的,通常她在消息的前面加上一个ON_ ,然后再消息的最后加上 _REFLECT。例如我们前面提到的WM_CTLCOLOR 经过处理后变成了ON_WM_CTLCOLOR_REFLECT;WM_MEASUREITEM则变成了ON_WM_MEASUREITEM_REFLECT。

  凡事总会有例外,这里也是这样,这里面有3个例外:

  (1) WM_COMMAND 转换成 ON_CONTROL_REFLECT;

  (2) WM_NOTIFY 转换成 ON_NOTIFY_REFLECT;

  (3) ON_UPDATE_COMMAND_UI 转换成 ON_UPDATE_COMMAND_UI_REFLECT;

  对于函数原型,也必须是以 afx_msg 开头。

  利用ClassWizard添加消息反射

  (1)在ClassWizard中,打开选择项Message Maps;

  (2)在下拉列表Class name中选择你要控制的类;

  (3)在Object IDs中,选中相应的类名;

  (4)在Messages一栏中找到前面带有=标记的消息,那就是反射消息;

  (5)双击鼠标或者单击添加按钮,然后OK!

zwfgdlc 2010-03-12
  • 打赏
  • 举报
回复
消息影射吧,哪有什么消息反射。
macrojj 2010-03-12
  • 打赏
  • 举报
回复
请高手们不吝赐教
dengzhu 2010-03-12
  • 打赏
  • 举报
回复
进来学习的
  • 打赏
  • 举报
回复
zgjxwl 2010-03-12
  • 打赏
  • 举报
回复
zhusuguo 2010-03-12
  • 打赏
  • 举报
回复
http://school.cnd8.com/vc/jiaocheng/28813.htm
网上看到的资料,孙鑫对消息影射的剖析,或许对你有用
macrojj 2010-03-12
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 visualeleven 的回复:]

http://hi.baidu.com/rommyong/blog/item/f0e6dec26c4c5e36e5dd3b8d.html
看看这个或许对你理解Reflect Message有帮助
[/Quote]
这篇文章来来回回看了很多次了。

我能理解ctlcolor这类的反射。
是不是所以的消息 都能反射呢。 比如我的控件给父窗口post了一个消息,之后这个消息能被反射回来吗。

我想这种没有实际的作用。但是只是想问这样是不是可以的。
如果可以应该怎么做。如果不可能,是为什么呢。

因为看了上文,我对反射的理解是。先问父窗口的onnotity ->父窗口问子窗口有没有自己的处理 有就调用。
实在很晕。。。。
Eleven 2010-03-12
  • 打赏
  • 举报
回复
http://hi.baidu.com/rommyong/blog/item/f0e6dec26c4c5e36e5dd3b8d.html
看看这个或许对你理解Reflect Message有帮助
低调的狮子 2010-03-12
  • 打赏
  • 举报
回复
还是传说中的"回调"?
cdsnpeter 2010-03-12
  • 打赏
  • 举报
回复
http://topic.csdn.net/t/20060812/00/4944264.html
岁月小龙 2010-03-12
  • 打赏
  • 举报
回复
反射?映射?????????????????????????????

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧