蛋痛的MFC,,,,菜单变灰而己

次日,发现如果企图在mainview 中去改菜单的灰掉是不可以的,必须在mainframe ....

而mainframe中也必须让菜单加载完成才能改...这个就是一个比较蛋痛的地方...

一般来说,要让一个菜单灰掉,觉得不是太难的事...

可是这玩意居然还让我弄了一两个小时,

最主要的是快下班了..心情不爽.....

基本是这样的...

CMenu menu;
menu.LoadMenu(IDR_MAINFRAME);
menu.GetSubMenu(2)-> EnableMenuItem(ID_CSCAF, MF_GRAYED);

但是.....

我发现我居然看少了MSDN 上的几句话

// The code fragment below shows how to disable (and gray out) the
// File\New menu item.
// NOTE: m_bAutoMenuEnable is set to FALSE in the constructor of
// CMainFrame so no ON_UPDATE_COMMAND_UI or ON_COMMAND handlers are
// needed, and CMenu::EnableMenuItem() will work as expected.

CMenu* mmenu = GetMenu();
CMenu* submenu = mmenu->GetSubMenu(0);
submenu->EnableMenuItem(ID_FILE_NEW, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);

// NOTE: m_bAutoMenuEnable is set to FALSE in the constructor of 

这句要在mainframe中加的...我擦...我的时间啊

 ps:另外,今天本想使一个右键菜单灰掉.

-----------------------------------------------------------------

//Disable:

//m_popupMenu是一菜单成员变量

CMenu *pMenu;
pMenu = m_popupMenu.GetSubMenu(0);

//禁止第一项(0)【按照位置】
pMenu->EnableMenuItem(0, MF_BYPOSITION|MF_GRAYED );
或【按照名称】
pMenu->EnableMenuItem(IDM_XXX, MF_BYCOMMAND|MF_GRAYED );

//Enable:

-----------------------------------------------------------------

据说可以按顺序,

或按ID,

我一开始用按顺序的方法失败了,一定要按ID吗?话说如果没有改写那个子菜单的ID的话会很一串数字,可读性与顺序号一样差,有时更差....

原文地址:https://www.cnblogs.com/vimmer/p/2408345.html