如何在窗口中缩放屏幕

How get screen scale in windows?

本文关键字:缩放 屏幕 窗口      更新时间:2023-10-16

我正在编写一个Windows程序,允许用户在1920 * 1080和3840 * 2160之间切换分辨率,这意味着在FHD和4K之间切换。

我尝试使用"GetSystemMetrics"来获得当前的分辨率。

//Algorithm #1
//Get current resolution and resolution scaling.
xScreenResolution = GetSystemMetrics(SM_CXSCREEN);
yScreenResolution = GetSystemMetrics(SM_CYSCREEN);
cout << "Current Resolution is: " << xScreenResolution << "x" << yScreenResolution << endl;
例如,如果我使用的分辨率为 3840*2160

,我希望程序会给我 3840*2160 的分辨率。但是,该程序仅输出1536x864,这是Windows执行重新缩放后的分辨率。

所以我想知道如何像 Windows 100 中的显示设置一样以编程方式获取比例因子(100%、200%、250% 等)。视窗 10 中的显示设置

您的应用程序似乎接收了虚拟化的 DPI 数据。若要接收正确的指标,需要提供适当的应用程序清单,包括高 DPI 支持和系统兼容性条目。请参阅高 DPI。

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <application xmlns="urn:schemas-microsoft-com:asm.v3">
        <windowsSettings>
            <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">True/PM</dpiAware>
        </windowsSettings>
    </application>
    <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
        <application>
            <!-- Windows 10 -->
            <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
        </application>
    </compatibility>
</assembly>

要获得缩放,您可以调用GetDpiForMonitor