【发布时间】:2017-09-18 20:55:16
【问题描述】:
我有一个奇怪的问题。我正在尝试使用 WPF 设置光标位置。到目前为止,一切都很好。问题如下:
在我的电脑屏幕(1920x1080,100% 窗口缩放)上一切正常,但在我的 Surface 笔记本电脑(3000x2000,200% 窗口缩放)上,我遇到了一些问题。由于缩放因子,“新分辨率”为 1500x1000(因为 200% 每个像素都是“两倍大”)。
当我使用 WinForms 将光标设置为 750、500 时,光标出现在屏幕的正中间,但是当我使用 WPF 将光标位置设置为同一点时,光标出现在左上角。
显然WinForms在设置光标位置时使用1500x1000分辨率,WPF使用3000x2000分辨率...
为什么他们在这里使用不同的分辨率?这对我来说没有意义。因为当我用
阅读 ScreenWidth 和 HeightSystem.Windows.Forms.Screen.PrimaryScreen.Bounds.Width // and Height, WinForms
和
System.Windows.SystemParameters.PrimaryScreenWidth // and Heigth, WPF
两者都显示 1500x1000。
谁能帮帮我?也许这只是 WPF/WinForms 的区别?
设置光标的代码:
Cursor.Position = p; // with imported System.Windows.Forms;
// or (tryed both)
[DllImport("User32.dll")]
private static extern bool SetCursorPos(int X, int Y);
SetCursorPos(p.X, p.Y);
第一次发帖,请不要杀了我!
【问题讨论】:
-
尝试在启动时调用
[DllImport("user32.dll")]private static extern bool SetProcessDPIAware();,看看是否能解决您的问题。 -
明确地说,您在 WPF 和 WinForms 应用程序中使用相同的
SetCursorPos方法,并使用相同的参数值调用它,但您看到的结果不同?