光标位置函数返回错误的值



我有一个2160 x 1440的小屏幕,所以我在Windows上使用150%的缩放。

使用Cursor.Position甚至GetCursorPos / GetPhysicalCursorPos,我总是在屏幕上获得缩放坐标(例如(2160,1440)变成(1440,960)。

我确信这是最近的变化,因为我以前在这个屏幕上使用Cursor.Position没有问题。

如何解释这种行为?为什么GetCursorPosGetPhysicalCursorPos返回相同的值时,他们应该是不同的在我的屏幕上?

最重要的是,是唯一的方法来获得正确的值调整这些函数返回使用DPI?

对于遇到这个问题的人,我仍然没有解释为什么在使用GetPhysicalCursorPosGetCursorPos检索它们时没有区分物理和逻辑坐标。PhysicalToLogicalPoint无法工作,因为它在Windows 8.1之后不再被支持。

然而,让所有的程序是一致的似乎是可能的,使形式dpiAware在其app.manifest。这本质上使所有坐标都合乎逻辑,消除了使用系统的dpi来计算它的需要。例如,在运行时更改表单的宽度与在编辑器中更改时的更改量不同(多1.5倍)。另一个例子是使用Graphics.CopyFromScreen,它希望由我* 1.5检索的坐标正常工作。更改dpi感知后,现在一切正常工作。

最新更新