如何使用 MFC 禁用顶级菜单项并使其变灰

2024-05-02

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

我通过在对话框属性中设置 Popup=False 并分配消息 ID 来做到这一点,但我的问题是,当项目可点击没有意义时,无法正确禁用该项目(取决于存储在对话)

我已经找到了如何禁用任何弹出父菜单项http://www.microsoft.com/msj/0299/c/c0299.aspx 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::绘制菜单栏 http://msdn.microsoft.com/en-us/library/b8ze1zsd(VS.80).aspx应该做你想做的事。它也可以与基于对话框的应用程序一起使用。

void CYourDlg::EnableMenuItem(UINT nCommand, BOOL bEnable)
{
   CMenu* pMenu = GetMenu();
   pMenu->EnableMenuItem(nCommand, bEnable ? 0 : MF_DISABLED | MF_GRAYED);
   DrawMenuBar();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 MFC 禁用顶级菜单项并使其变灰 的相关文章

随机推荐

  • 在 Haskell/Yampa 和 HOOD 中调试游戏对象的输出

    我一直坚持使用 Haskell Yampa Arrows with HOOD 为我的游戏对象生成调试输出 我的引擎基本上运行一系列游戏对象 这些对象产生输出状态 线 圆 然后进行渲染 data Output Circle Position2
  • 动态添加导航抽屉中的项目

    我创建了抽屉 但是我想动态设置抽屉的项目列表 意味着从数据库获取数据并设置为抽屉列表 是否可以 是的 比如何 我也知道静态抽屉 尝试这个 final Menu menu navigationView getMenu for int i 1
  • .Net HashSet唯一性计算完全基于哈希码吗?

    我想知道 Net 是否HashSet
  • xmlstarlet:通过位置号选择元素

    我有这个 XML 文件
  • 如何在
    CSS 中正确定位箭头

    我想更改详细信息中出现的箭头的位置 我尝试过 float left 但如果线条太大 如上面示例中的线条 则当我调整窗口大小时 箭头将移动到下方线条的开头 我希望它保留在第一行的第一个字母之外 我怎样才能做到这一点 Example
  • WebAPI如何处理嵌套资源?

    我正在寻找有关使用 WebAPI 2 时最佳实践的意见和建议 假设我有两个控制器 用户和书籍 并且想要接受这些路由 users user id books lt books owned by user id books lt all boo
  • 在 Windows 上使用 Python 打开设备句柄

    我正在尝试使用 Giveio sys 驱动程序 该驱动程序需要先打开一个 文件 然后才能访问受保护的内存 我正在查看 WinAVR AVRdude 中的 C 示例 它使用以下语法 define DRIVERNAME giveio HANDL
  • Java-Android 上的 MulticastSocket 问题

    我开始使用 MulticastSocket 进行编码 尝试制作一个带有客户端和服务器的简单应用程序来发送消息 我的服务器代码 import java io IOException import java net DatagramPacket
  • 具有多个 FROM 表的 TableGateway

    我想做一个简单的INNER JOINZend2 中的两个表之间 具体来说 我想在 Zend2 中这样做 SELECT FROM foo bar WHERE foo foreign id bar id 我有一个FooTable class F
  • 尝试使用 C#.Net 编码 HMAC-SHA256

    我尝试将 HMAC SHA256 算法编码为函数 HMAC K m H K opad H K ipad m where H 是加密哈希函数 K 是一个秘密密钥 在哈希函数的输入块大小或原始密钥的哈希值 如果它长于该块大小 的右侧添加了额外的
  • font-face 声明中还需要 eot、ttf 和 svg 吗?

    到目前为止 我一直使用 Paul Irish 的防弹字体语法 http www paulirish com 2009 bulletproof font face implementation syntax 但我只是在寻找对 woff 和 w
  • 将表中的行相对于另一个表拖放[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 嘿 我有两个行数相同的表 例如 如果我尝试对 tableOne 中的一行 例如 row 3 进行排序 则其他表 tabl
  • printf 字符串,可变长度项

    define SIZE 9 int number 5 char letters SIZE this wont be null terminated char fmt string 20 sprintf fmt string d ds SIZ
  • scala-js 如何与 sbt-web 集成?

    我想用scala js https github com scala js scala js with sbt web https github com sbt sbt web以这样的方式 它可以被编译以生成添加到资产管道中的 JavaSc
  • 如何用 PHP 编写固定宽度的文本文件

    我正在尝试做一些应该很容易的事情 但遇到了问题 我想要做的就是从 MySQL 表生成报告 并将其作为纯 txt 文件 我需要文件固定宽度 因此一切都排列整齐并且看起来不错 我将使用 courier 字体 它只是一个准系统表格 但我如何才能真
  • 当应用程序崩溃时,Android Studio ADB 会清除 logcat 文件!哦美伊

    刚刚升级了最新的Android Studio 现在 当应用程序崩溃时 日志文件 adb logcat 就会消失 它不仅停止记录整个日志似乎突然被删除了 对于调试来说不太酷 我需要设置日志缓存大小或其他什么吗 还注意到调试器需要很长时间来收集
  • DBI:在 eval 中引发错误

    这个问题参考了池上的评论 But if you re going to put an eval around every statement just use RaiseError gt 0 in this thread https sta
  • 在 Django 中延迟文件下载的正确方法

    我有一个基于类的视图 它触发用户编写和下载报告 通常在def get我刚刚编译的班级报告 添加response Content Disposition attachment filename somefilename pdf 并向用户返回响
  • 如何在Java程序中检索环境变量的修改值(外部修改的)?

    是否可以在 Java 程序中检索环境变量的修改值 我尝试使用System getenv 但新的值并没有体现在程序中 场景是这样的 该程序检索环境变量的值 当程序仍在运行时 该变量的值可以从外部更改 甚至可以是手动过程 例如在 Windows
  • 如何使用 MFC 禁用顶级菜单项并使其变灰

    我有一个对话框应用程序 我希望在对话框顶部有可单击的菜单项 这些项目不显示下拉菜单 但实际上运行关联的命令 我通过在对话框属性中设置 Popup False 并分配消息 ID 来做到这一点 但我的问题是 当项目可点击没有意义时 无法正确禁用