我在对话框上放了一个有CStatic继承来的CMyStatic类对象,现在我想在对话框移动的时候,在CMyStatic类的内部来处理WM_MOVE消息,可是这个消息被父窗口截获了,我不想用SendMessage发送一个消息到CMyStatic对象,我想象控件反射消息那样在子窗口类中处理,有什么好的机制来实现?怎么能在父窗口得到消息之前,子窗口得到此消息?

解决方案 »

  1.   

    virtual BOOL PreTranslateMessage( 
    MSG* pMsg )
    {
      if(pMsg->message == WM_MOVE)
      {
         //work here
      }

      

  2.   

    这个消息根本流不到子窗口,必须在父窗口中调用的,我是说能不能只在子类中处理,因为我是要封一个dll的。用户创建了一个子窗口,我还要扑捉它父窗口的动作。
      

  3.   

    消息反射也差不多就是主窗口调用子窗口的函数。写一个函数要父窗口调用咯。GetDlgItem(***) ->Move(***);
      

  4.   

    我发现最小化消息只流到父窗口,根本就没给子窗口发任何的消息,可是子窗口随着父窗口的最小化是消失了(hide)还是最小化了?就在最小化的时候,父窗口给子窗口发了什么消息?我没看到任何的消息,这是怎么回事?
      

  5.   

    用hook截获WM_MOVE再判断其窗口句柄是否和父句柄相等
      

  6.   

    这倒是个好方法,可是能给一小段代码吗?我对hook不懂。
      

  7.   

    可以对当前线程HOOK,应该可以解决。
      

  8.   

    子窗口在父窗口之前在得到WM_MOVE才有必要用HOOK,不知楼主想做什么,我觉得父窗口给子窗口发消息是最好的方法,即使子窗口另外封装成DLL。
      

  9.   

    我也很少用,不熟,不过我知道这个办法肯定行。
    你goole一下大把的,并不难
      

  10.   

    我有一事不明,当创建了WS_CHILD窗口后,父窗口的消息难道一定要在手工添加上传入到子窗口中,为什么父窗口不主动传到子窗口?那WS_CHILD的意义是什么?只有在WM_DESTROY时才通知子窗口?谁能给我解释一下,不胜感激。
      

  11.   

    父窗口并不是把所有消息都传给子窗口,只有一些对子窗口有意义的消息,比如WM_DESTROY
    父窗口内部应该也是通过类似Send/post消息的方式递消息