我想在一个对话框中,通过一个BOOL变量m_bFlag使一个菜单项有效或变灰,我以前在单文档视图结构中都是通过重载ON_UPDATE_COMMAND_UI消息,在消息中调用pCmdUI->Eable(m_bFlag)来实现的,可是现在在对话框中就不行了,不知道是为什么?

解决方案 »

  1.   

    没有,不过在调试模式下,在debug窗口有一个warning-not executing disabled command
      

  2.   

    CMenu* pSubMenu;
    menu.LoadMenu(IDR_MENU1);
    pSubMenu = (CMenu*)menu.GetSubMenu(*); 
    pSubMenu->ModifyMenu()
    MSDN上差下modifyMeun 的参数,好像第二个参数
      

  3.   

    case WM_INITMENUPOPUP: int iEnable;
    iEnable = IsClipboardFormatAvailable (CF_BITMAP) ?MF_ENABLED : MF_GRAYED ;
    EnableMenuItem ((HMENU) wParam, IDM_PASTE, iEnable) ;
    iEnable = hBitmap ? MF_ENABLED : MF_GRAYED ;
    EnableMenuItem ((HMENU) wParam, IDM_CUT,    iEnable) ;
    EnableMenuItem ((HMENU) wParam, IDM_COPY,   iEnable) ;
    EnableMenuItem ((HMENU) wParam, IDM_DELETE, iEnable) ;
      

  4.   

    pCmdUI->Eable(m_bFlag
    可以实现。 菜单被禁用了 只是没有变灰。
      

  5.   

    //将第N个子菜单下的IDM_XXX项禁用且变灰
    CMenu* mmenu=GetMenu();
    CMenu* submenu=mmenu->GetSubMenu(N-1);
    submenu->EnableMenuItem(IDM_XXX, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
      

  6.   

    UpdateUI这套机制是在Idle函数里做的,而Dialog实现并没有Idle机制,所以……
      

  7.   

    麻烦7楼的深入讲讲Idle机制!
      

  8.   

    CFrameWnd实现了一套UI的刷新机制,很多是在Idle的时候被调用,可以参见CWnd::OnEnterIdle。另外菜单刷新是在OnInitMenuPopup,OnMenuSelect,弹出tooltip Window是OnToolTipText时候做的,如果要实现完全的UpdateUI这套机制,必须把这些东西全实现出来才行。
      

  9.   

    请教6楼   你那段代码应写在什么函数中啊? 我写在MainFrame的构造中和OnCreate函数中都出错了