CView和CFrameWnd产生的对象都是窗口,并且是同一个窗口类的。CView覆盖在CFrameWnd之上。
比如说我在CView(客户区)上移动鼠标的消息,怎么CFrameWnd也接收到了?
而CFrameWnd上比如在非客户区移动鼠标的消息,CView接收不到。

解决方案 »

  1.   

    只有具有输入焦点的窗口才接收输入消息,这里CView占据了CFramwWnd的客户区,如果CView设置了焦点(SetFocus),CFramwWnd的客户区不会接收到输入消息,你完全可以验证一下。
      

  2.   

    楼主可以查查MFC的消息机制!
      

  3.   

    CView和CFrameWnd产生的对象都是窗口,并且是同一个窗口类的。CView覆盖在CFrameWnd之上。 
    比如说我在CView(客户区)上移动鼠标的消息,怎么CFrameWnd也接收到了? 如一楼:这里CView占据了CFramwWnd的客户区,如果CView设置了焦点(SetFocus),CFramwWnd的客户区不会接收到输入消息,一般情况下CFrameWnd是有焦点的而CFrameWnd上比如在非客户区移动鼠标的消息,CView接收不到。很简单,CView的范围到不了非客户区
      

  4.   

    因为在视图架构中View是Frame的子窗口,子窗口会把消息向父窗口传递的
    MSDN的CView里面有详细的说明
      

  5.   

    MFC中CView和CFrameWnd的关系不仅仅是两个窗口的关系,它们之间不是完全独立的.实际上,前者律属于后者.通常情况下,子窗口的消息需要通过父窗口转接,反之,则不然.
      

  6.   

    CFrameWnd先接收消息,再传送给CView,CDocument等,深入浅出MFC里说的很详细的.
      

  7.   

    我问题描述错误。⊙﹏⊙b汗
    CView是当前焦点,鼠标和键盘的消息都发给了CView。
    但是CFrameWnd接收到了wm_setcursor.
      

  8.   

    MFC里一般的消息WM_都会流向消息MSG中的句柄对应的窗口(或往上走)中去。