是啥导致 MFC 应用程序菜单栏变灰? [关闭]
Posted
技术标签:
【中文标题】是啥导致 MFC 应用程序菜单栏变灰? [关闭]【英文标题】:What causes an MFC app menu-bar to be greyed out? [closed]是什么导致 MFC 应用程序菜单栏变灰? [关闭] 【发布时间】:2021-01-28 23:48:27 【问题描述】:我正在处理一个遗留的 MFC 项目。该项目包括一个具有菜单栏的 SDI 应用程序。
启动后,应用程序的菜单栏完全变灰:
我已阅读以下问题,但它们似乎无法解决我的情况:
MFC Menu Item remains grayed
Menu items are being enabled or disabled by default. Why?
基本上,上述问题的答案表明我需要一个 ON_COMMAND 处理程序,它存在于我感兴趣的菜单功能中。
这是一个非常大的专有项目,所以我不能简单地发布代码,并且可能需要一段时间来提取一个最小的可重现示例。是否有任何我可以搜索的功能名称可能会禁用菜单栏?
在我看来,整个菜单栏都被禁用了,所以我认为我的问题与个别 ON_COMMAND 处理程序无关。
经过一些更改后没有发生这种情况,否则我只会回滚更改。我相信自从我开始使用该应用程序以来,它一直以灰色的菜单栏启动。
主应用程序是一个 CWinApp 派生类,而我添加 ON_COMMAND 处理程序的类是一个 CFrameWnd 派生类。
我正在使用 Windows SDK 版本 10.0 在 VS2019 (v142) 中进行开发,并在 Windows 10 上进行测试。我感觉(有点不受支持)这个特定问题与编译器的确切版本没有密切关系,或者甚至是 Windows 10;我的猜测是我缺少一些关于 MFC 通常如何启用或禁用菜单栏的细节。
【问题讨论】:
自上次菜单栏工作以来发生了什么变化?如果您“不能简单地发布代码”,那么您至少应该尝试缩小范围 - 使用哪些类、编译器的版本、Windows 的版本等。 @dxiv 我没有进行更改,导致它变灰;自从我开始处理应用程序以来就是这样。我将在问题中添加详细信息:编译器等。 我不是说这是你的改变。但是如果那个菜单栏从来没有工作过,那就很奇怪了,所以问题仍然是它最后一次工作是什么时候,以及从那以后发生了什么变化。 【参考方案1】:“灰显”表示该小部件已禁用。
您需要在小部件上EnableWindow
。
指定EnableWindow(FALSE)
将禁用小部件(窗口)。
困难的部分是找出这个函数在哪里或如何被调用。 状态可以在资源文件中指定。 它也可以在初始化方法或构造函数中声明。
【讨论】:
虽然这并没有直接回答问题,但它引导我找到了解决方案,因为我开始在类文件以外的地方寻找。最后的问题是资源中的每个菜单项都将 Grayed 属性设置为 True。只需将其设置为 false 即可启用菜单标题。 @afa 如果答案没有回答您的问题。不要接受它。接受答案是一种告诉未来访问者在哪里可以找到答案的方式。这不是那个地方。 哇,我认为如果它有用并且答案不必完全回答问题,您可以接受。许多人提供答案作为线索或建议(以免做 OP 的工作),他们仍然被接受。以上是关于是啥导致 MFC 应用程序菜单栏变灰? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章