为什么菜单不能变灰

roamerhn 2006-07-18 06:39:42
我在我的视图类中想使系统菜单项中的某个菜单变灰,代码如下:
CMenu *pMenu=AfxGetMainWnd()->GetMenu();
CMenu *pSubMenu=pMenu->GetSubMenu(4);
pSubMenu->EnableMenuItem(ID_RESETDOWNCOMPUTER,MF_DISABLED|MF_GRAYED);
请问这是怎么回事?
...全文
220 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ckp 2006-07-18
  • 打赏
  • 举报
回复
使菜单变灰的实现原理实际上与使按钮变灰的原理是截然不同的,方法如下:
使菜单变灰实际上是由编程者事先写好逻辑代码,再将逻辑代码嵌入到菜单项的消息处理函数UPDATE_COMMAND_UI中,当程序执行时,由程序根据潜入到UPDATE_COMMAND_UI中的代码来决定是否将菜单项变灰:
a.点击"建立类向导"或者"MFC classWizard"菜单项,在第一选项页Message Maps中的Object IDs中选择你想变灰的菜单ID,在右边选择UPDATE_COMMAND_UI,点击Add Function按钮增加消息处理函数,点击Edit Code按钮,在消息处理函数中添加代码如下(我做过的一个程序):
extern short MyRight;
pCmdUI->Enable(MyRight == 111 || MyRight == 222);
这段代码实际上是根据全局变量MyRight的值来决定是否将此菜单项变灰,如果条件不成立,菜单项就是灰的。你还可以自己编写全局函数并根据函数的返回值来确定是否变灰。
teli_eurydice 2006-07-18
  • 打赏
  • 举报
回复
加入这个


void OnInitMenuPopup(CMenu* pPopupMenu, UINT nIndex, BOOL bSysMenu)
{
if (!bSysMenu)
{
ASSERT(pPopupMenu != NULL);

// check the enabled state of various menu items
CCmdUI state;
state.m_pMenu = pPopupMenu;
ASSERT(state.m_pOther == NULL);

state.m_nIndexMax = pPopupMenu->GetMenuItemCount();
for (state.m_nIndex = 0; state.m_nIndex < state.m_nIndexMax;
state.m_nIndex++)
{
state.m_nID = pPopupMenu->GetMenuItemID(state.m_nIndex);
if (state.m_nID == 0)
continue; // menu separator or invalid cmd - ignore it

ASSERT(state.m_pOther == NULL);
ASSERT(state.m_pMenu != NULL);
if (state.m_nID == (UINT)-1)
{
// possibly a popup menu, route to first item of that popup
state.m_pSubMenu = pPopupMenu->GetSubMenu(state.m_nIndex);
if (state.m_pSubMenu == NULL ||
(state.m_nID = state.m_pSubMenu->GetMenuItemID(0)) == 0 ||
state.m_nID == (UINT)-1)
{
continue; // first item of popup can't be routed to
}
state.DoUpdate(this, FALSE); // popups are never auto disabled
}
else
{
// normal menu item
// Auto enable/disable if command is _not_ a system command
state.m_pSubMenu = NULL;
state.DoUpdate(this, state.m_nID < 0xF000);
}
}
}

}
whwjn 2006-07-18
  • 打赏
  • 举报
回复
你把它变灰了,等你在点开菜单时会自动刷新菜单的,所以看不到效果

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧