C++ Windows API - 如何获取字体缩放百分比

4

我想在C++ Windows API应用程序中获取"Make text bigger"的百分比。我知道如何检索缩放(DPI)因子,但我也想包括字体缩放百分比(请参见附图,上面的值而不是下面的值)。

最终,我想制作一个应用程序,以保留用户字体和DPI缩放设置,以完全支持无障碍功能。目前,字体在.rc文件中指定,如下所示:

FONT 8, "MS Shell Dlg 2", 0, 0, 0x0

但即使省略FONT语句,在更改“增大文本”设置时字体仍不会改变。 enter image description here

GetScaleFactorForMonitor?https://learn.microsoft.com/en-us/windows/win32/api/shellscalingapi/nf-shellscalingapi-getscalefactorformonitor - Simon Mourier
据我所知,该设置仅返回第二个值,因此是 DPI 缩放而不是字体大小。 - campovski
1
有一个适用于此的WinRT API:https://learn.microsoft.com/en-us/uwp/api/windows.ui.viewmanagement.uisettings.textscalefactor,否则在`HKEY_CURRENT_USER\SOFTWARE\Microsoft\Accessibility`注册表键中查找`TextScaleFactor`值(非官方文档记录)。 - Simon Mourier
@SimonMourier 非常感谢,这正是我一直在寻找但找不到的!如果您想的话,可以发布一个答案以备将来参考并提升声望 :) - campovski
1个回答

4
对于“使一切变大”部分,您可以使用GetScaleFactorForMonitor来获取特定监视器的比例因子。
对于“使文本变大”部分,您可以使用WinRT静态属性:UISettings.TextScaleFactor来获取系统文本大小设置的值。
否则,后者也可以使用HKEY_CURRENT_USER\SOFTWARE\Microsoft\Accessibility注册表键中的TextScaleFactor DWORD属性读取(但这不是官方文档记录的)。

如何在不使用任何.NET库的情况下,通过C++实现字体缩放? - Somnium
@Somnium - WinRT不是一种托管的API。它是与语言无关的,并且具有.NET和C/C++的投影。我会使用C++/WinRT。https://learn.microsoft.com/en-us/windows/uwp/cpp-and-winrt-apis/intro-to-using-cpp-with-winrt - Simon Mourier
这是否可能只使用Windows API,而不需要额外的库? - Somnium
WinRT是一个Windows API,没有涉及到额外的库。 - Simon Mourier

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接