我在CMainFrame::OnCreate()中用
m_bAutoMenuEnable = FALSE; //设置菜单项目
// CMenu * m_pSysMenu;
// m_pSysMenu=GetMenu();
// m_pSysMenu->EnableMenuItem(ID_BILL_CUSTOMER,MF_DISABLED|MF_GRAYED); CMenu* mmenu = GetMenu();
CMenu* submenu = mmenu->GetSubMenu(1);
submenu->EnableMenuItem(ID_BILL_CUSTOMER, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);

怎么菜单一点反映都没有呢.

解决方案 »

  1.   

    用ClassWizard给需要变灰的菜单项添加UPDATE_COMMAND_UI函数,
    然后在那个新添加的OnUpdateXXXX()函数中添加:pCmdUI->Enable(false);
      

  2.   

    我不希望哪样,因为我必须为每个命令响应UPDATE_COMMAND_UI,现在在CMainFrame中就有很多函数。看起来就不方便。
      

  3.   

    用ClassWizard给需要变灰的菜单项添加UPDATE_COMMAND_UI函数,如果这很多菜单的更新逻辑机制相同的话,就修改所有的函数名为同一个函数(多对一影射),然后在函数内部code了!
      

  4.   

    就只能这一种方法么。
    我什么我哪样做没反映呢,m_bAutoMenuEnable = FALSE;到底是什么意思呢。
    (连禁用都不行)哪CMenu,HMenu有什么用呀。
      

  5.   

    你这种方法当然是可以的
    我怀疑是你这几句里的GetMenu, GetSubMenu 有点问题,你确认一下他们的值对不对,或者不要再Oncreate里,而是在别的地方试试,比如OnMenuPopup里(WM_INITMENUPOPUP的消息处理函数里)
             CMenu* mmenu = GetMenu();
    CMenu* submenu = mmenu->GetSubMenu(1);
    submenu->EnableMenuItem(ID_BILL_CUSTOMER, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
      

  6.   

    能给不是用UPDATE_COMMAND_UI的例子么。
    最好可以下载源代码。
      

  7.   

    用ClassWizard给需要变灰的菜单项添加UPDATE_COMMAND_UI函数,
    然后在那个新添加的函数中添加:
    pCmdUI->Enable(false);
    这个方法可行,试过没有
      

  8.   

    m_bAutoMenuEnable=FALSE;
    是没有问题的