“消息反射”是父窗口接受控件发来的消息后,将消息反射给控件处理的过程,在控件中,对于WM_NOTIFY消息可用ON_NOTIFY_REFLECT宏处理。

解决方案 »

  1.   

    declaim a message handler then difine this message handler as you like and
    finally, add a message macro into the message map like AppWizard have done !
    more detail in MSDN
      

  2.   

    “消息反射”可这样:
      #define MSG_EXAMPLE WM_USER + 1 ;
      在想作消息映射的类中
      Begin Message....
      ON_MESSAGE(MSG_EXAMPLE, 想触发的函数体)
      End Message...;  在想触发这个消息时:
      消息定义类的句柄->SendMessage(MSG_EXAMPLE) ;
     
      ok搞定,噢别忘记写相应的函数体!
      

  3.   

    “消息反射”可这样:
      #define MSG_EXAMPLE WM_USER + 1 ;
      在想作消息映射的类中
      Begin Message....
      ON_MESSAGE(MSG_EXAMPLE, 想触发的函数体)
      End Message...;  在想触发这个消息时:
      消息定义类的句柄->SendMessage(MSG_EXAMPLE) ;
     
      ok搞定,噢别忘记写相应的函数体!
    [email protected]
      

  4.   

    就farland明白你在说啥——所以以后问问题也要说明白一点,比如在后面说明一下,"注意:不是消息映射。farland说的差不多,大致就那意思。窗口(以对话框为例)上的控件在接收用户输入时会给父窗口发送消息(一般称知为通知消息),以让父窗口知道用户有了某个动作,从而进行相应处理。消息反射(Message Reflection)是MFC4.0中新增的:在此之前,没有这个概念。上面说了,控件发消息给父窗口,而自己不作处理。这样父窗口类就会显得很复杂,且如果一个控件中有好多消息要处理,则每个用到它的父窗口类都不得不添加好多同样的代码。能不能把这样的处理放到控件本身来处理呢?这就引出了消息反射的概念。对于一个控件消息,现在允许控件本身(当然你得为它生在一个类,比如从CStatic继承一个子类)生成一个相关的处理函数,如Farland所说,用ON_NOTIFY_REFLECT. 但同时并没有禁止父窗口对它的处理。这句话理解起来也许费事:对于用ON_NOTIFY_REFLECT宏映射的处理函数,即使父窗口中有一个同样的处理函数,也不会被调用,也就是消息只在控件类中响应。当然,如果控件类没有生成处理函数,则父窗口会处理它,就当没有消息反射这回事。除ON_NOTIFY_REFLECT宏之外,还有一个ON_NOTIFY_REFLECT_EX宏,如果它映射的处理函数返回TRUE,则如果父窗口在有相应的处理函数,也会被处理(显然时间在它之后)。如果返回Flase,则父窗口不会理会。由此可见,消息反射并不像它的名字那样,其实只是在消息从控件出发前,先由控件本身处理,再发到父窗口而已。请参见MSDN中的 Technical 62