为什么GetSystemMetrics(SM_CXVIRTUALSCREEN)返回“错误”值?

时间:2019-07-11 15:42:40

标签: hdpi

我遇到的问题是,当工具栏从4k拖动到标准def时,它们会丢失。在200%缩放的桌面(它们只是消失)(从CMFCToolbar派生)上进行监控。这看起来有点像MFC错误,因为我不处理拖动过程,但是在应用程序上。启动它会通过执行此操作来检查Windows是否在桌面上的某处-

int width =  GetSystemMetrics(SM_CXVIRTUALSCREEN);
int height = GetSystemMetrics(SM_CYVIRTUALSCREEN);

这使我得到11520(不正确)x 2160(正确)。

我在左边有一个4K显示器,在右边有1080p显示器。桌面缩放比例为200%

对于每台显示器缩放比例,我得到5760 x 2160。该应用程序在4k显示器上。

(在没有DPI支持的情况下,我的分辨率为5760 x1080。这不是告诉我我的主显示器是1920像素吗?)

那么(1)这些API是否存在一个错误,告诉我我的桌面大小? (2)我是否需要深入研究MFC源代码以了解为什么它不能处理从高清拖动到sd屏幕的问题?

1 个答案:

答案 0 :(得分:1)

如GetSystemMetrics函数文档中所述:

  

此API不支持DPI,如果调用此API,则不应使用   线程是每个监视器DPI感知的。对于此的DPI感知版本   API,请参阅GetSystemMetricsForDPI。有关DPI的更多信息   了解,请参阅Windows High DPI文档。

https://docs.microsoft.com/uk-ua/windows/win32/api/winuser/nf-winuser-getsystemmetrics