gpt4 book ai didi

c++ - Win32 在 C++ 中获取未缩放的虚拟桌面大小

转载 作者:行者123 更新时间:2023-12-05 05:42:13 25 4
gpt4 key购买 nike

在 C++ 应用程序上工作,尝试将鼠标从坐标映射到全屏窗口。

使用 GetPhysicalCursorPos(&mouse_point); 获取鼠标坐标,它返回相对于原点 0,0 的坐标。这会导致问题,因为鼠标正在“超出显示器范围”,因为窗口正在按比例缩小它们。例如。它在右下角时返回 {3839, 1079},但 Windows 将桌面总大小计算为 3200x1080。 (此示例并排放置两个 1080p 显示器,左侧为 100% 缩放比例,右侧为 150% 缩放比例)

检索虚拟桌面大小:

unsigned int vScreenWidth = GetSystemMetrics(SM_CXVIRTUALSCREEN);
unsigned int vScreenHeight = GetSystemMetrics(SM_CYVIRTUALSCREEN);

但这将返回一个桌面,其中具有更高 DPI 的显示器更小,因此对于 3840x1080 的双 1080p 显示器配置,它返回 3200x1080(上述配置)。

我已经尝试使用 96 DPI (100%) 的 GetSystemMetricsForDpi 但它返回的结果与上面相同:

unsigned int vScreenWidth = GetSystemMetricsForDpi(SM_CXVIRTUALSCREEN, 96 /* 100% scaling*/);
unsigned int vScreenHeight = GetSystemMetricsForDpi(SM_CYVIRTUALSCREEN, 96 /* 100% scaling*/);

尽管明确告诉它强制使用 100% 缩放,但在上面的混合缩放示例中,上面的代码也返回 3200x1080。

有没有其他方法可以获取未缩放的虚拟桌面大小?

请注意,该应用程序不支持 DPI

最佳答案

感谢@RaymondChen,我能够通过在 GetSystemMetricsForDpi 之前调用 SetThreadDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2); 来修复它。

它现在返回完整的虚拟桌面大小。

关于c++ - Win32 在 C++ 中获取未缩放的虚拟桌面大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72101951/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com