我正在编写一个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
答案 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
。