高分!困扰总专家分1w+的csdner的一个很难的问题!关于Windows消息及doc&view问题。高手请进!
我为这个已经头疼了很多天了。
在MFC向导中,如果你用SDI/MDI生成一个程序,会有doctemplate,document,view和Frame,这个时候可以用ON_COMMAND宏来定制菜单或工具栏消息,可以用ON_COMMAND_UPDATE_UI来定制菜单和工具栏的状态.
我查过很多资料,发现 ON_COMMAND_UPDATE_UI消息是 SDI/MDI app在onIDLE的情况下发送给各个按钮之类的,也就是说Update消息并不是主动发出,而是app在空闲的情况下发送给按钮要求更新的。
然而,问题就出现了!
当我使用默认的SDI/MDI生成文件,当然可以随意使用UPDATE消息宏来定制我的程序,并且,哪怕我不使用SDI/MDI,只要我的App中默认使用frame作为app的m_pMainWnd,再生成我的view之类的,工具栏等一样可以用ON_COMMAND_UPDATE_UI宏来定制消息。
但是!!
如果我修改一下程序,例如改成app先启动一个dialog,然后点击dialog的某个按钮或者菜单再启动这个frame,怪事就发生了,ON_COMMAND消息宏仍然有效,但是ON_COMMAND_UPDATE_UI宏却失效了,frame上面的toolbar和菜单不能响应view里面设置的宏了!!
我重载了app的OnCmdMsg函数让其先访问frame的OnCmdMsg以及修改dialog的OnCmdMsg函数,到后来甚至跟踪到pretranslatemsg,仍然查不到是怎么回事!view定制的Update宏就像没有发生过一样,在庞大的doc&view架构里面消失的无影无踪。
我对docview架构的一些细节实在是有点搞不清楚,请各位大虾指点一下迷津,这个问题已经困扰我很多很多天了!!谢谢啦,200分奉上!