【发布时间】:2021-05-15 13:37:09
【问题描述】:
我的目标是能够在 C++ 应用程序运行时根据显示器分辨率调整字体大小。
this question中解释了如何获取字体缩放百分比,但建议的功能GetScaleFactorForMonitor需要Windows 8.1。我的 C++ 应用程序必须在 Windows 7 或更高版本上运行。我已经尝试了几种基于获取设备上限参数比率的建议解决方案,但它们都在 Windows 10 系统上获得 1.0,其中 Windows“让一切都变大”设置为 150%。
根据 MS 文档,Visual Studio 正在向清单中添加“dpiAware”(这是我可以更改的设置)。可能是因为应用程序是在 Windows 7 系统上构建的,VS 生成的清单不包括 Windows 10 作为支持的操作系统。如果我添加行
<!--This Id value indicates the application supports Windows 10, Windows Server 2016 and Windows Server 2019-->
<supportedOS Id="{{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
在清单中,当我在 Windows 10 上运行应用程序时,我收到“并排”错误。
如何在 Windows 7 或 10 系统上获得“让一切变大”和“让文本变大”设置?
构建系统:64 位 Windows 7、Visual Studio 2019 16.7.7 运行系统:Windows 7 或更高版本
【问题讨论】:
-
阅读您的问题我不完全相信您阅读了您正确链接的帖子(或者也许我没有阅读正确?)。 “让一切变得更大”是“DPI 设置”(历史上设置为 100% - 96 dpi;125% - 120 dpi;150 % - 144 dpi;这是使用 HDC 的 dpi 值访问的。
GetScaleFactorForMonitor似乎是与此设置相关联,但我不知道您为什么要使用该功能而不是使用 DPI 值)。 “使文本变大”似乎是“新”的 WinRT 事物(因此在 Windows 7 中不存在),并使用UISettings.TextScaleFactor阅读。 -
我需要我的应用调整字体大小以匹配用户的设置。正如您所指出的,在 Win 7 中,只有选项 100、125 和 150%。在 Win 10(也许还有 Win 8.1,不要在意;没有人会使用 8 或 8.1)中,有两种设置。无论哪种情况,我都需要知道所需的字体大小(以像素为单位),它与显示器的 dpi 不同。例如,在 3840x2160 显示器上,我将“让一切变大”设置为 150%,正确的外观是通过将字体大小(高度)乘以 1.5 获得的。但是如何获得用户设置的 1.5 因子? (续)
-
(conti)
TextScaleFactor是 .NET 的东西,我只使用 MFC。 -
>
For example, on a 3840x2160 monitor, I have the "make everything bigger" set to 150%..."让一切变得更大" 是 DPI 设置。您混淆了这两个设置。TextScaleFactor(即“使文本变大”)不是 .NET 的东西,而是 WinRT 的东西。这主要用于 UWP 开发,适用于 .NET 和 C++(通过 C++/WinRT);它适用于 UWP 应用程序,而不是 Win32 应用程序(当然,尽管没有人阻止您在 Win32 应用程序中使用它,但您必须调用 WinRT 库,或读取未记录的注册表项)。 -
DPI 是每英寸点数的缩写,通常指显示器上的显示。确实,这可以在硬件中或通过 WINdows 进行更改,但事实并非如此。 Windows 通过使用不同的字体和控件等大小来调整所有内容的大小,但显示屏以每物理英寸的相同点数(像素)显示这些内容。所以问题仍然存在:我怎样才能访问用户设置的 1.5 比例因子。