c++ - 如何使用 MFC 禁用顶层菜单项并将其变灰

标签 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);
}

这一半有效,如果您 alt-tab 远离应用程序,它会显示为已禁用,否则不会显示。

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

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

最佳答案

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

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

关于c++ - 如何使用 MFC 禁用顶层菜单项并将其变灰,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1835209/

相关文章:

c++ - 无法从挂起进程的单独线程中读取管道

C++ 时间限制不起作用

c++ - MFC CScrollView 滚动不工作

jquery - bpopup 不工作 + 在页面加载时显示

python - 在 Python 中暂停执行

c++ - 为什么此代码会出现段错误?

c++ - 在对话框窗口中使用 ListControl

windows - 如何判断应用程序是不是MFC程序?

android - Android 中不显示弹出窗口的背景

javascript - Chrome 扩展弹出窗口打不开