c# - 光标位置函数返回错误值

标签 c# .net windows screen coordinates

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

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

我确信这是最近的更改,因为我之前在此屏幕上使用过 Cursor.Position 没有出现任何问题。

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

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

最佳答案

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

但是,通过在 app.manifest 中创建 dpiAware 形式,似乎可以使所有程序保持一致。这本质上使所有坐标都符合逻辑,无需使用系统的 dpi 来计算坐标。 例如,在运行时更改表单的宽度与在编辑器中更改宽度时的更改量不同(1.5 倍)。另一个例子是使用 Graphics.CopyFromScreen,它希望我检索到的坐标 * 1.5 能够正常工作。更改 dpi 感知后,现在一切正常。

关于c# - 光标位置函数返回错误值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33237893/

相关文章:

c# - 如何抽象出不同的 JSON 库实现

.net - Windows 媒体中心插件

c# - 如何在使用泛型时指定匿名类型的类型

.net - CruiseControl.NET 持续集成阻止文件访问

c++ - .dll 与带有导出的 .dll,有什么区别?

c# - Thread.CurrentPrincipal.Identity 与 HttpContext.User.Identity

c# - float 的乘法性能不一致

c++ - 如何正确设置 CMakeLists.txt 文件?

java - 我想在 Ubuntu 12.04LTS 中制作直接执行 jar 文件的 sh 文件

c# - OLEDB 连接字符串中的 IMEX 是什么?