如何解决我必须禁用子菜单MFC C ++
我必须尝试禁用子菜单项:
CMenu* pMenu = AfxGetMainWnd()->GetMenu();
CMenu* pSubMenu = pMenu->GetSubMenu(1);
if (pMenu != NULL)
{
//for (UINT i = 0; i < pMenu->GetMenuItemCount(); ++i)
pSubMenu->EnableMenuItem(ID_FILE_CONFRONTO_GRAFICI,MF_BYPOSITION | MF_GRAYED);
}
解决方法
我解决了这个问题:
CMenu* pMenu = AfxGetMainWnd()->GetMenu();
CMenu * subMenu = pMenu->GetSubMenu(0);
if (subMenu != NULL)
{
subMenu->EnableMenuItem(1,MF_BYPOSITION | MF_DISABLED);
}
澄清
EnableMenuItem
具有以下定义:
UINT EnableMenuItem( UINT nIDEnableItem,UINT nEnable);`
要了解的重要一点是正确使用最后一个nEnable
参数。引用:
nEnable
指定要采取的措施。它可以是组合MF_DISABLED
,MF_ENABLED
或MF_GRAYED
,以及MF_BYCOMMAND
或MF_BYPOSITION
。可以通过按位OR
组合这些值 操作员。这些值具有以下含义:
MF_BYCOMMAND
指定该参数给出该命令的命令ID 现有菜单项。这是默认设置。
MF_BYPOSITION
指定参数赋予 现有菜单项。第一项位于位置0。
在原始代码中,您拥有:
pSubMenu->EnableMenuItem(ID_FILE_CONFRONTO_GRAFICI,MF_BYPOSITION | MF_GRAYED);
问题:
- 您使用过
MF_BYPOSITION
(这意味着nIDEnableItem
是从零开始的索引)... - 您使用
ID_FILE_CONFRONTO_GRAFICI
作为第一个参数。
因此,有两种方法可以执行此操作(有些例外):
-
subMenu->EnableMenuItem(1,MF_BYPOSITION | MF_DISABLED);
-
subMenu->EnableMenuItem(ID_FILE_CONFRONTO_GRAFICI,MF_BYCOMMAND | MF_DISABLED);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。