在C++应用程序上工作,尝试将鼠标从坐标映射到全屏窗口。
使用GetPhysicalCursorPos(&mouse_point);
获取鼠标坐标,后者返回相对于原点0、0的坐标。这会导致问题,因为鼠标正在“超出”监视器的范围,因为窗口正在缩小监视器的大小。例如,当它位于右下角时,它返回{3839,1079},但是Windows计算桌面的总大小为3200x1080。(这个例子是两个1080 p显示器,并排,左有100%缩放,右边有150%缩放)
使用以下方法检索虚拟桌面大小:
unsigned int vScreenWidth = GetSystemMetrics(SM_CXVIRTUALSCREEN);
unsigned int vScreenHeight = GetSystemMetrics(SM_CYVIRTUALSCREEN);
但是这是返回一个桌面,其中具有较高DPI的监视器较小,因此对于3840x1080的双1080p监视器配置,它返回3200x1080 (上面的配置)。
我尝试过在96 DPI中使用GetSystemMetricsForDpi
(100%),但它返回的结果与上面的相同:
unsigned int vScreenWidth = GetSystemMetricsForDpi(SM_CXVIRTUALSCREEN, 96 /* 100% scaling*/);
unsigned int vScreenHeight = GetSystemMetricsForDpi(SM_CYVIRTUALSCREEN, 96 /* 100% scaling*/);
在上面的混合缩放示例中,上面还返回3200x1080,尽管显式告诉它强制使用100%缩放。
有没有其他方法来获得联合国规模的虚拟桌面大小?
注意,应用程序是,而不是新闻部感知的。
发布于 2022-05-03 17:52:15
多亏了@RaymondChen,我才能在GetSystemMetricsForDpi
之前打电话给GetSystemMetricsForDpi
来解决这个问题。
它现在返回完整的虚拟桌面大小。
https://stackoverflow.com/questions/72101951
复制相似问题