CMenu* mmenu = GetMenu();
CMenu* submenu = mmenu->GetSubMenu(0);
submenu->EnableMenuItem(ID_FILE_NEW, MF_BYCOMMAND | MF_GRAYED);
在基于对话框的应用程序中,没有使用ON_UPDATE_COMMAND_UI,想使右键弹出式菜单的一些菜单项根据条件有效或无效,用EnableMenuItem函数因为先要在CMainFrame类及派生类对象的构造函数中将m_bAutoMenuEnable 设为FALSE,但m_bAutoMenuEnable 不是CDialog的数据成员,而只是CMainFrame的数据成员,怎么办?怎样使EnableMenuItem函数起作用?!

解决方案 »

  1.   

    相应消息函数WM_INITMENUPOPUP,可能错了,不过大致如此,你可在classwizard里看到,在里面设置MenuItem的属性,要注意的问题是,确保该Menu是你要操作的Menu,通常做法是比较低一个Item的ID
      

  2.   

    我的右键弹出式菜单在CMyDlg::OnContextMenu(CWnd* pWnd, CPoint point) 
    函数中使用TrackPopupMenu函数
      

  3.   

    WM_INITMENUPOPUP是菜单每次弹出时激发的消息,与菜单是如何,何时,在那儿,是否是主菜单都没有关系,你的登陆前和登陆后的菜单弹出都会激发该消息,处理起来没有什么问题吧!
      

  4.   

    http://www.csdn.net/Develop/read_article.asp?id=9481
      

  5.   

    在classwizard怎么找不到WM_INITMENUPOPUP呀
      

  6.   

    CDialog没有WM_INITMENUPOPUP,还是只在CMainFrame中有,气愤
      

  7.   

    谢谢jiangsheng ,还得在对话框中手工添加WM_INITMENUPOPUP
      

  8.   

    方法2(更简单,但是效率不高,使用的是空闲时间处理)http://www.csdn.net/Develop/read_article.asp?id=9490