我正在尝试禁用主菜单项。 在MDI应用程序中,这有效:
CWnd *pW=AfxGetMainWnd();
CMenu * pMenu=pW->GetMenu();
pMenu->EnableMenuItem(5, MF_BYPOSITION | MF_GRAYED | MF_DISABLED);
不在SDI中。最有可能的是,我把它放到了错误的地方。 CMainFrame的?风景?哪个特殊子程序?我尝试了构造函数,但UI没有变化。
感谢任何帮助,我正在敲打我的脑袋并搜索了许多网站(和这里),但没有找到正确的方向。
非常感谢答案 0 :(得分:1)
您不希望直接启用/禁用MFC下的菜单项,无论是SDI还是MDI。
相反,当您将项目添加到菜单时,会为其添加两个事件处理程序。一个用于“COMMAND”,另一个用于“UPDATE_COMMAND_UI”。
COMMAND
处理程序实际执行该菜单项的命令。
UPDATE_COMMAND_UI
处理程序(间接)通过返回true / false来启用/禁用菜单项,以指示是否应该启用它。
至于为什么这是优选的:首先,因为你可以(例如)菜单条目和工具栏调用相同的动作。这会自动启用/禁用两者。
答案 1 :(得分:0)
你可以通过使用类向导来添加处理通过UPDATE_COMMAND_UI启用/禁用菜单项的功能来实现这一点:
void CMyAdoMfcView::OnUpdateAddnew(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable(true);
}
在我的代码中,我启用了菜单项AddNew
。