是什么导致 MFC 应用程序菜单栏变灰?

What causes an MFC app menu-bar to be greyed out?

我正在处理遗留 MFC 项目。该项目包括一个带有菜单栏的 SDI 应用程序。

启动后,应用程序的菜单栏完全变灰:

我已经通读了以下问题,但它们似乎没有解决我的情况:

MFC Menu Item remains grayed

Menu items are being enabled or disabled by default. Why?

基本上,上述问题的答案表明我需要一个 ON_COMMAND 处理程序,它存在于我感兴趣的菜单功能中。

这是一个非常大的专有项目,所以我不能简单地 post 代码,提取最小的可重现示例可能需要一段时间。是否有任何我可以搜索的功能名称可能会禁用菜单栏?

在我看来整个菜单栏都被禁用了,所以我认为我的问题与个别 ON_COMMAND 处理程序无关。

经过一些更改后没有发生这种情况,否则我只会回滚更改。我相信自从我开始使用该应用程序以来,该应用程序的启动菜单栏一直是灰色的。

主应用程序是 CWinApp 派生的 class,我添加 ON_COMMAND 处理程序的 class 是 CFrameWnd 派生的 class。

我正在使用 Windows SDK 版本 10.0 在 VS2019 (v142) 中进行开发,并在 Windows 10 上进行测试。我有一种感觉(有点不受支持)这个特定问题并没有得到密切关注与编译器的确切版本有关,甚至 Windows10;我的猜测是我遗漏了 MFC 通常如何启用或禁用菜单栏的一些细节。

“变灰”表示小部件已禁用

您需要 EnableWindow 在小部件上。 指定 EnableWindow(FALSE) 将禁用小部件 (window)。

困难的部分是找出调用此函数的位置或方式。 状态可以在资源文件中指定。 它也可以在初始化方法或构造函数中声明。