BEGIN_MESSAGE_MAP(CTestApp, CWinApp)
ON_COMMAND(ID_APP_ABOUT, &CTestApp::OnAppAbout)
END_MESSAGE_MAP()新建个MFC工程,默认的那个是放在 App 类里,这有什么好处? 我觉得菜单是在框架上,为什么Microsoft 不设计默认在 Frame 类里?
还有一点不明白&CTestApp::OnAppAbout 前为什么要取地址?函数名不已经是地址了吗,再取不就是传说中的指向指针的指针,为什么要这么设计,有什么好处?谢谢达人!
ON_COMMAND(ID_APP_ABOUT, &CTestApp::OnAppAbout)
END_MESSAGE_MAP()新建个MFC工程,默认的那个是放在 App 类里,这有什么好处? 我觉得菜单是在框架上,为什么Microsoft 不设计默认在 Frame 类里?
还有一点不明白&CTestApp::OnAppAbout 前为什么要取地址?函数名不已经是地址了吗,再取不就是传说中的指向指针的指针,为什么要这么设计,有什么好处?谢谢达人!
System->FrameWnd(orignal)->ActiveView->AvtiveDocument->FrameWnd(process)->App
ActiveView是优先处理command消息的,如果不处理依次向后转发,直到被抛弃,一般MENU是在view中被处理
还有为什么放在 Dlg 类里的,按钮是灰的,不能点?
1楼是正解,去仔细研究哈。MFC响应消息的顺序。就可,之所以将菜单的命令消息
放在APP最后一个中。是为了保证菜单命令消息能被响应
lz可以自己做一个test。在每个类中添加一个鼠标左键点击消息。。看看他们的顺序,
就知道了
听你这么一说,我倒想起来了。
但能不能举个例:把菜单消息放在其他类,然后让他响应不到菜单命令消息谢谢
(1)这个消息跟哪一个类关系更密切。
(2)放在不同的类会造成界面行为不同。比如你有两个view,那么你放在哪一个view,相应的菜单项只有这个view激活时才能选择,如果想另一个view激活时也能选择,就需要放在CMyApp或CMyDoc等。
(3)为了你写函数的方便。比如这个响应函数用到的数据都在那个类。
命令消息不同于一般window消息,MFC的消息循环机制遇见命令消息会调用OnCommand函数,OnCommand函数会调用OnCmdMsg函数进行消息路由。如果重载该函数可以将命令消息分派到任意类对象,而不局限于主窗类对象(菜单所属窗口)。