大虾们好 :
      我在看《深入浅出MFC》的时候,有一个地方不是很理解,望大家给解答一下!
       
      书中说:由于CDocument派生自CCmdTarget,所以他可以接受来自菜单或工具栏的WM_COMMAND消息,不能接受一般的Windows消息。 View类派生自CWnd所以他可以接受一般的Windows消息,又由于他也派生自CCmdTarget,所以他可以接受来自菜单和工具栏的WM_COMMAND消息。      我的不解:系统消息和命令消息在CWnd中分流,如果是系统消息在CWnd中直接由基类向父类传递,如果是命令消息则需要进一步传递在CCmdTarget中处理,也就是命令消息也必须通过CWnd的传递,为什么CDocument可以处理命令消息,而不可以处理系统消息?   大虾们帮忙解释下!

解决方案 »

  1.   

    你说的系统消息就是Windows消息吧,
    因为CDocument是直接从CCmdTarget继承而来的,它没有窗口,
    而Windows消息都是在窗口中处理,所以它无法处理,可以从消息结果体来看
    typedef struct tagMSG { 
    HWND hwnd; 
    UINT message; 
    WPARAM wParam; 
    LPARAM lParam; 
    DWORD time; 
    POINT pt; } 
    MSG; 
    这个消息结构体中有窗口句柄,系统就是通过它来找到窗口并进行消息投递的
      

  2.   

    一般来说CCmdTarget的派生类如果其任何一级的基类都不是CWnd,那么他一般只处理命令消息,而不处理windows窗口消息。  
      其实只要是CCmdTarget的派身类已经具备了消息处理功能。已经可以加入消息映射宏进行消息处理了。