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

时间:2015-10-20 13:24:05

标签: c# .net windows screen coordinates

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

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

我很肯定这是最近的更改,因为我之前在此屏幕上使用Cursor.Position时没有遇到任何问题。

如何解释这种行为?为什么GetCursorPosGetPhysicalCursorPos会在屏幕上显示不同时返回相同的值?

最重要的是,是唯一可以通过DPI调整这些函数返回值的方法吗?

1 个答案:

答案 0 :(得分:0)

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

然而,通过在app.manifest中创建dpiAware形式,似乎可以使所有程序保持一致。这基本上使所有坐标都合乎逻辑,从而无需使用系统的dpi来计算它。 例如,在运行时更改窗体的宽度会将其更改为与在编辑器中更改窗体时的宽度不同(1.5倍以上)。另一个例子是使用Graphics.CopyFromScreen,它希望我* 1.5检索的坐标正常工作。更改dpi意识后,现在一切正常。