在 MFC 中禁用菜单压缩

Disabling menu compression in MFC

我的英语并不完美。我正在使用 Visual C++ 2019 和 MFC。在我的 MDI 程序中,菜单是压缩的:我看不到所有项目,菜单底部有一个类似双箭头的东西,我总是必须点击它们。我不能禁用它。在资源视图中,我无法打开整个菜单的属性页,只能打开文件等菜单的属性页。我没有在属性页上找到禁用。在代码中,在MainFrm.cpp、CBRS_SIZE_DYNAMICCBRS_FLYBY中出现了2+2次。我试图对它们发表评论,但这并没有解决问题。如何禁用压缩?谢谢。

我无法打开整个菜单的属性页。也许它没有属性页,或者原因是 Visual Studio 中缺少高 DPI 支持。例如,我无法编辑图标:图标编辑器不可用。在生成的程序中,工具栏的高 DPI 支持似乎取决于样式。在 WinAPI 程序中,有 3 个像素阶梯:模拟 1/3 分辨率。我这里有 3*96 dpi = 288 dpi,0,16 mm * 3 = 0,48 mm。

使用CMFCMenuBar::SetShowAllCommands

Remarks

If a menu does not display all the menu commands, it hides the commands that are rarely used.

应用程序是否应显示所有菜单项或仅显示最近使用的菜单项(用户必须展开其余菜单项)是一个可由用户设置的选项:工具栏选项->添加或删除按钮->自定义->选项->个性化菜单和工具栏->菜单首先显示最近使用的命令。此选项保存在 HKEY_CURRENT_USER\SOFTWARE\CompanyName\ApplicationName\Workspace\MFCToolBarParameters\RecentlyUsedMenus 下的注册表中,因此应用程序会“记住”它。

可以使用 CMFCMenuBar::SetRecentlyUsedMenus() 函数以编程方式更改它 - 它是一个静态函数。

最好让用户决定应用程序的工作方式,所以我建议您...什么都不做。或者,您可以将其设置为 FALSE,但仅限于第一次应用程序 运行。在注册表中添加一个新的布尔值,在 ...ApplicationName\Workspace 或 ...ApplicationName\Settings 下,值始终设置为 TRUE。执行此操作的最佳位置是应用程序 class 的 SaveCustomState() 成员函数。在 LoadCustomState() 中读取该值(默认为 FALSE),如果为 TRUE,则调用 CMFCMenuBar::SetRecentlyUsedMenus(FALSE);.