如何使用MFC禁用和灰显顶级菜单项

Pet*_*mmo 4 c++ mfc popup menuitem

我有一个对话框应用程序,我想在对话框的顶部有可点击的菜单项.这些项目不显示下拉菜单,但实际运行相关命令.

我这样做是通过在对话框属性中设置Popup = False并指定一个消息ID,但是我的问题是没有能力正确地禁用该项目,因为该项目无法点击(取决于存储在该项目中的内部状态)对话)

我已经找到了如何从http://www.microsoft.com/msj/0299/c/c0299.aspx禁用任何弹出 - 父菜单项,但这不是我想要的

我还了解了如何从msdn知识库文章KB242577向菜单添加菜单命令路由.

这适用于子菜单项,但不适用于顶级菜单.

我目前正在使用以下功能来执行禁用

void CYourDlg::EnableMenuItem(UINT nCommand, BOOL bEnable)
{
   CMenu* pMenu = GetMenu();
   pMenu->EnableMenuItem(nCommand, bEnable ? 0 : MF_DISABLED | MF_GRAYED);
}
Run Code Online (Sandbox Code Playgroud)

这一半可以工作,如果你远离应用程序的alt-tab它显示为禁用,否则它不会.

有没有办法以编程方式使该区域无效?

我认为可能涉及非客户区域消息.

Bos*_*gan 5

我没有尝试但是在常规窗口(不是对话框)CWnd :: DrawMenuBar应该做你想要的.它也可以与基于对话框的应用程序一起使用.

void CYourDlg::EnableMenuItem(UINT nCommand, BOOL bEnable)
{
   CMenu* pMenu = GetMenu();
   pMenu->EnableMenuItem(nCommand, bEnable ? 0 : MF_DISABLED | MF_GRAYED);
   DrawMenuBar();
}
Run Code Online (Sandbox Code Playgroud)