如何获得Windows中的屏幕比例?

时间:2017-10-05 09:30:50

标签: c++ windows winapi

我正在编写一个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执行重新缩放后的分辨率。

所以我想知道如何以编程方式获得比例因子(100%,200%,250%等),如Windows 10中的显示设置。 display settings in Windows 10

1 个答案:

答案 0 :(得分:1)

您的应用程序看起来像是接收虚拟化的DPI数据。要获得正确的指标,您需要提供适当的应用程序清单,包括高DPI支持和系统兼容性条目。请参阅High 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