MFC中,CFormView类中一个按钮和MAINFRM中菜单的一个选项点击后都调用同一个窗口,这个窗口的实现是在CFormView类中编写的,现在想问的是:1.能不能分别在CFormView类和MAINFRM中映射此窗口函数,我试过了好像不可以?2.如果不可以,那该如何实现。

解决方案 »

  1.   

    可以,使用ON_COMMAND_EX宏映射消息,这时可以在消息响应函数中决定是否继续发送这个消息。
      

  2.   

    MFC中view类先于CMainFrame类获取WM_COMMAND消息,因此view类会先处理消息。如果使用ON_COMMAND映射消息,则消息函数没有返回值,view处理完之后CMainFrame类不能处理这个消息了。但是可以是用ON_COMMAND_EX来映射这个消息,这样view类的消息函数有一个BOOL类型的返回值,你可以在消息函数中决定是否继续传递这个消息,如果选择继续传递,CMainFrame就有机会处理它了
      

  3.   

    是这个道理,但是在CMainFrame的消息映射中出现问题ON_COMMAND(ID_MENUITEM32777,OnYczd)或这样ON_COMMAND(ID_MENUITEM32777,Cdlggnxz::OnYczd)都是会报错的。备注:Cdlggnxz为视图类的派生类,ID_MENUITEM32777为CMainFrame类中菜单的ID