【问题标题】:Why is GetSystemMetrics (SM_CXVIRTUALSCREEN) returning 'bad' values?为什么 GetSystemMetrics (SM_CXVIRTUALSCREEN) 返回“坏”值?
【发布时间】:2019-07-11 15:42:40
【问题描述】:

我遇到的问题是,当工具栏从 4k 拖到标准 def 时,我会丢失工具栏。在 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(SM_CXVIRTUALSCREEN) 不适用于非常大的分辨率

标签: c++ winapi hdpi


【解决方案1】:

正如 GetSystemMetrics 函数的文档中所写:

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

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

【讨论】:

    猜你喜欢
    • 2011-02-07
    • 1970-01-01
    • 1970-01-01
    • 2014-04-21
    • 1970-01-01
    • 1970-01-01
    • 2015-05-20
    • 2018-01-29
    • 2020-04-01
    相关资源
    最近更新 更多