我有一个 2160 x 1440 的小屏幕,因此我在 Windows 中使用 150% 缩放。
使用 Cursor.Position
甚至 GetCursorPos/GetPhysicalCursorPos
我总是在屏幕上获得缩放坐标(例如,(2160, 1440) 变为 (1440, 960)。
我确信这是最近的更改,因为我之前在此屏幕上使用过 Cursor.Position
没有出现任何问题。
如何解释这种行为?为什么 GetCursorPos
和 GetPhysicalCursorPos
在我的屏幕上应该不同时返回相同的值?
最重要的是,这是使用 DPI 调整这些函数返回值来获取正确值的唯一方法吗?
最佳答案
对于遇到这个问题的人,我仍然无法解释为什么在使用 GetPhysicalCursorPos
和 GetCursorPos
检索物理坐标和逻辑坐标时没有区别。 PhysicalToLogicalPoint
不起作用,因为 Windows 8.1 之后不再支持它。
但是,通过在 app.manifest 中创建 dpiAware
形式,似乎可以使所有程序保持一致。这本质上使所有坐标都符合逻辑,无需使用系统的 dpi 来计算坐标。
例如,在运行时更改表单的宽度与在编辑器中更改宽度时的更改量不同(1.5 倍)。另一个例子是使用 Graphics.CopyFromScreen,它希望我检索到的坐标 * 1.5 能够正常工作。更改 dpi 感知后,现在一切正常。
关于c# - 光标位置函数返回错误值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33237893/