C++ Windows API - 如何检索字体缩放百分比

问题描述 投票:0回答:2

我想检索 C++ Windows API 应用程序中的 “使文本变大” 百分比。我知道如何检索缩放(DPI)系数,但我还想包括字体缩放百分比(请参阅附图,上值,而不是下值)。

最终,我想制作保留用户字体和 DPI 缩放设置的应用程序,以便完全支持辅助功能。目前,字体在

.rc
文件中指定,如下所示

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

但即使省略 FONT 语句,更改“使文本更大”设置时字体仍然不会改变。

c++ winapi
2个回答
5
投票

对于“使所有内容变大”部分,您可以使用 GetScaleFactorForMonitor

获取特定显示器的比例因子。

对于“使文本变大”部分,您可以使用 WinRT 静态属性:UISettings.TextScaleFactor

获取系统文本大小设置的值。

否则后者也可以使用

TextScaleFactor
来读取
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Accessibility
注册表项中的 DWORD 属性(但这没有正式记录)。


0
投票

来自 https://devblogs.microsoft.com/oldnewthing/20230830-00/?p=108680

我为您删除了 C# 的示例。请注意,您需要 Windows 10 SDK 才能执行此操作,但通过一些工作,您可以获得与 Windows 8.1 SDK 一起使用的最后一个示例。

IUISettings2
接口可以在您自己的代码中定义。

// C++/WinRT
#include <winrt/Windows.UI.ViewManagement.h>

double GetTextScaleFactor()
{
    return winrt::Windows::UI::
           ViewManagement::UISettings().TextScaleFactor();
}

// C++/CX

double GetTextScaleFactor()
{
    return (ref new Windows::UI::
        ViewManagement::UISettings())->TextScaleFactor;
}

// C++/WRL
#include <Windows.UI.ViewManagement.h>

HRESULT GetTextScaleFactor(double* value)
{
    *value = 1.0;

    using namespace Microsoft::WRL;
    using namespace Microsoft::WRL::Wrappers;

    ComPtr<IInspectable> instance;
    HRESULT hr = RoActivateInstance(HStringReference(
        RuntimeClass_Windows_UI_ViewManagement_UISettings).Get(),
        &instance);
    if (FAILED(hr)) return hr;

    ComPtr<ABI::Windows::UI::ViewManagement::IUISettings2>
        settings2;
    hr = instance.As(&settings2);
    if (FAILED(hr)) return hr;

    hr = settings2->get_TextScaleFactor(value);
    if (FAILED(hr)) return hr;

    return S_OK;
}
© www.soinside.com 2019 - 2024. All rights reserved.