蛋痛的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的话会很一串数字,可读性与顺序号一样差,有时更差....