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