UPDATE_COMMAND_UI消息具体有什么作用,它由什么引发产生的,例如WM_COMMAND消息可由用户点击下拉菜单的菜单项产生,然后再消息处理函数中通过比对WM_COMMAND附带的菜单ID进行不同的处理,而对于UPDATE_COMMAND_UI消息它是如何产生的,为什么要产生该消息(即产生该消息的具体作用),而举例如ON_UPDATE_COMMAND_UI(ID_MENU1, OnUpdateMenu1)宏中为什么要让ID_MENU1与OnUpdateMenu1相关联,在OnUpdateMenu1响应函数中,如:
void CMainFrame::OnUpdateMenu1(CCmdUI* pCmdUI) 
{
// TODO: Add your command update UI handler code here

}
仅有一个CCmdUI* pCmdUI参数,孙鑫的视频上说当要显示菜单时,操作系统发出WM_INITMENUPOPUP消息,然后由程序的基类如CFrameWnd接管,它会创建一个CCmdUI对象,并与程序的第一个菜单项关联,调用该对象的一个成员函数DoUpdate(),这函数产生CN_UPDATE_COMMAND_UI消息,这条消息带有一个指向CCmdUI对象的指针,而由上面说的CCmdUI对象已经与程序的第一个菜单项关联,那还要在ON_UPDATE_COMMAND_UI宏中:如ON_UPDATE_COMMAND_UI(ID_MENU1, OnUpdateMenu1)中将ID_MENU1(菜单ID)和响应函数OnUpdateMenu1相关联干吗?

解决方案 »

  1.   

    这个映射函数估计是菜单准备画的时候发送的
    你可以修改pCmdUI中的属性来达到菜单的使能、更改菜单标题、样式等操作也就是说应该是在WM_INITMENUPOPUP消息发生后
      

  2.   

    它会创建一个CCmdUI对象,并与程序的第一个菜单项关联
    ===================================================
    具体怎么关联,关联哪一项是由
    ON_UPDATE_COMMAND_UI
    决定的。不是由孙鑫决定的。
      

  3.   

    ON_UPDATE_COMMAND_UI(ID_MENU1, OnUpdateMenu1)就是告诉框架,对于ID的菜单项与哪个命令更新函数对应
    这里就告诉了框架,菜单项ID_MENU1的更新由函数OnUpdateMenu1负责。
      

  4.   

    命令对象(包括菜单项、各种ControlBar等)在每次显示前都会给框架发此消息,活动视图类、文档类、框架类都可以响应,但只能在其中一个类中响应,优先次序就是活动视图->文档->框架,响应函数中可以设置命令对象的状态和执行其它操作。
      

  5.   

    应该就是在update菜单项之前发的消息,系统通过这个消息来决定怎么显示菜单.............
      

  6.   

    CCmdUI只是一个中间临时通信工具,由于每个菜单项或工具栏项的状态更新是依次发消息来获取的,所以能共用同一个CCmdUI,实际上CCmdUI只是一个函数中的局部变量,一个循环体依次处理每个菜单项,都会使用这个CCmdUI变量。