在一般的视图文档框架程序中,我选中菜单项后,该菜单项会自动被标记为选中状态(如在该菜单项前打小钩或圆点),并使其对应的工具栏中的按钮(即菜单项与该工具栏按钮有相同ID)通过处理ON_UPDATE_COMMAND_UI消息来设置该按钮的按下状态。 
但是在对话框程序中,不能直接处理ON_UPDATE_COMMAND_UI消息(根本收不到),首先我得通过处理ON_WM_INITMENUPOPUP消息来获得更新菜单项标记的时机,在这里可以标记出菜单项的选中与否,但是问题时,使用这种方法不能使该菜单项对应的工具栏按钮进行更新,也就是说,按钮不能保持被按下的状态。 
请教大家,在对话框程序中如何才能使选中的菜单项更新标记时同时更新其对应工具栏按钮的状态?谢谢了

解决方案 »

  1.   

    在模态对话框中没有必要这么做,不关对话框用户不能点击菜单.
    非模态对话框中可以发消息给MainFrame
      

  2.   

    楼上的,你好像还不明白我在说什么?
    我说的是基于对话框的程序,也就是说“MainFrame”就是一个对话框,而且我必须要用到菜单和工具栏。
      

  3.   

    直接使用CMenu::CheckMenuItem和CToolBarCtrl::CheckButton函数。
      

  4.   

    基于对话框的程序因为没有idle消息,必须直接控制.
      

  5.   

    如果是CToolBar:
    CToolBarCtrol & tbc=m_wndToolBar.GetToolBarCtrl();
    tbc.Enable(ID_XXXX,FALSE);//Grayed
    如果是CMenu:
    m_wndMenu.Enable(ID_YYYY,MF_GRAYED);
      

  6.   

    CToolBarCtrl& tbc = m_mainToolbar.GetToolBarCtrl();
    if(g_wash){
    pCmdUI->SetCheck(true);
    tbc.CheckButton(ID_WASH,true);
    }
    else{
    pCmdUI->SetCheck(FALSE);
    tbc.CheckButton(ID_WASH,FALSE);
    }