我想动态禁用主框架的某个菜单项,怎么设都禁用不了!
以下方法都试过了,都不行。CMenu*   mmenu   =   GetMenu();   
  CMenu*   submenu   =   mmenu->GetSubMenu(0);   
  submenu->EnableMenuItem(ID_FILE_NEW,   MF_BYCOMMAND   |   MF_DISABLED   |   MF_GRAYED);   和CMenu*   submenu   =   mmenu->GetSubMenu(0);   
  submenu->EnableMenuItem(1,MF_BYPOSITION|MF_GRAYED|MF_DISABLED);//BY_POSITION
该菜单项Popup = false;是不是这个原因啊?
我把它设成Popup = true后是可以动态禁用了,但动态启用后选择该菜单项无反应。我该怎么办啊?

解决方案 »

  1.   

    不太明白你的意思。void CMainFrame::OnUpdateFileNew(CCmdUI* pCmdUI) 
    {
        pCmdUI->Enable(true/false);
    }通过控制变量实现。
      

  2.   

    重载OnInitMenuPopup
    在这里面做...
      

  3.   

    在ClassWizard中,为该菜单添加UPDATE_COMMAND_UI处理
    void CMainFrame::OnUpdateFileNew(CCmdUI* pCmdUI) 
    {
        pCmdUI->Enable(true/false);
    }true为可用,false为禁用
      

  4.   

    你用这个方法没有禁用菜单,可能有两个原因:1.在ClassWizard中,你为该菜单添加了UPDATE_COMMAND_UI处理函数,并一直设置为TRUE
    void CMainFrame::OnUpdateFileNew(CCmdUI* pCmdUI) 
    {
        pCmdUI->Enable(TRUE);
    }
    2.还有一种可能就是你对系统的一个变量m_bAutoMenuEnable进行了设置
    this->m_bAutoMenuEnable=FALSE;这两种情况下即使没有对菜单加入消息处理函数,他们仍然不能禁止菜单项
      

  5.   

    http://topic.csdn.net/t/20020518/18/733321.html