为什么 GetSystemMetrics (SM_CXVIRTUALSCREEN) 返回'bad'值?

Why is GetSystemMetrics (SM_CXVIRTUALSCREEN) returning 'bad' values?

本文关键字:bad 返回 GetSystemMetrics SM CXVIRTUALSCREEN 为什么      更新时间:2023-10-16

我遇到的问题是,当工具栏从 4k 拖动到 200% 缩放桌面上的标准定义显示器时,我会丢失工具栏(它们只是消失了((源自 CMFCToolbar(。这看起来有点像 MFC 错误,因为我没有处理拖动过程,但是在应用程序启动时,它确实通过执行此操作检查窗口是否在桌面上的某个地方 -

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

这给了我 11520(不正确(x 2160(正确(。

我左边有一台 4K 显示器,右边有 1080p 显示器。桌面扩展为 200%

通过每个显示器缩放,我得到 5760 x 2160。这是合理的;该应用程序位于 4K 显示器上。

(在没有DPI支持的情况下,我得到5760 x 1080。它不应该告诉我我的主显示器是 1920 年吗?

那么(1(这些API中是否有一个错误告诉我我的桌面大小?(2(我是否需要深入研究MFC源,看看为什么它无法处理从高清拖动到SD屏幕?

如 GetSystemMetrics 函数的文档中所述:

此 API 无法识别 DPI,如果调用,则不应使用 线程是每个监视器 DPI 感知的。对于此的 DPI 感知版本 API,请参阅 GetSystemMetricsForDPI。有关新闻部的更多信息 意识,请参阅 Windows High DPI 文档。

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