2

我正在尝试禁用主菜单项。在 MDI 应用程序中,这有效:

CWnd *pW=AfxGetMainWnd();
CMenu * pMenu=pW->GetMenu();
pMenu->EnableMenuItem(5, MF_BYPOSITION | MF_GRAYED | MF_DISABLED);  

不在 SDI 中。很可能,我把它放在了错误的地方。C大型机?风景?哪个具体的子程序?我尝试了构造函数,但 UI 没有变化。

任何帮助表示赞赏,我正在敲打我的头并搜索了许多网站(和这里),但没有找到正确的方向。

非常感谢

4

2 回答 2

1

您不想直接启用/禁用 MFC 下的菜单项,无论是 SDI 还是 MDI。

相反,当您将项目添加到菜单时,您会为其添加两个事件处理程序。一个用于“COMMAND”,另一个用于“UPDATE_COMMAND_UI”。

在此处输入图像描述

处理COMMAND程序实际上执行该菜单项的命令。

处理程序(间接)通过UPDATE_COMMAND_UI返回 true/false 来启用/禁用菜单条目以指示是否应该启用它。

至于为什么这样做更可取:首先,因为您可以(例如)同时拥有调用相同操作的菜单条目和工具栏。这会根据需要自动启用/禁用两者。

于 2017-01-04T22:02:43.677 回答
0

您可以通过使用类向导添加通过 UPDATE_COMMAND_UI 处理启用/禁用菜单项的函数来做到这一点:

void CMyAdoMfcView::OnUpdateAddnew(CCmdUI* pCmdUI) 
{
    // TODO: Add your command update UI handler code here
    pCmdUI->Enable(true);
}

在我的代码中,我启用了菜单项AddNew

于 2017-01-04T22:56:27.307 回答