我必须禁用子菜单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_DISABLEDMF_ENABLEDMF_GRAYED,以及MF_BYCOMMANDMF_BYPOSITION。可以通过按位OR组合这些值 操作员。这些值具有以下含义:

MF_BYCOMMAND指定该参数给出该命令的命令ID 现有菜单项。这是默认设置。

MF_BYPOSITION指定参数赋予 现有菜单项。第一项位于位置0。

在原始代码中,您拥有:

pSubMenu->EnableMenuItem(ID_FILE_CONFRONTO_GRAFICI,MF_BYPOSITION | MF_GRAYED);

问题:

  1. 您使用过MF_BYPOSITION(这意味着nIDEnableItem是从零开始的索引)...
  2. 您使用ID_FILE_CONFRONTO_GRAFICI作为第一个参数。

因此,有两种方法可以执行此操作(有些例外):

  • subMenu->EnableMenuItem(1,MF_BYPOSITION | MF_DISABLED);
  • subMenu->EnableMenuItem(ID_FILE_CONFRONTO_GRAFICI,MF_BYCOMMAND | MF_DISABLED);

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...