我有一个奇怪的问题。我正在尝试使用 WPF 设置光标位置。目前为止,一切都好。问题如下:
在我的电脑屏幕上(1920x1080,100% 窗口缩放),一切正常,但在我的 Surface 笔记本电脑(3000x2000,200% 窗口缩放)上,我遇到了一些问题。由于比例因子,"新分辨率"为 1500x1000(因为 200%,每个像素都是"两倍大")。
当我使用 WinForms 将光标设置为 750、500 时,光标出现在屏幕的正中间,但当我使用 WPF 将光标位置设置为同一点时,光标出现在左上角。
所以显然 WinForms 在设置光标位置时使用分辨率 1500x1000,而 WPF 使用分辨率 3000x2000...
为什么他们在这里使用不同的分辨率?这对我来说没有意义。因为当我阅读屏幕宽度和高度时
System.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);
第一篇文章,请不要杀我!
我不是这个主题的专家,但也许:
WPF
使用矢量图形来渲染内容,并具有对缩放的本机支持。如果在 Windows 中将字体大小更改为200%
,则每个WPF
应用程序都将2x
大。
但是在WinForms
,如果你没有正确编写应用程序,缩放可能会毁了你的UI
。
为避免这种情况,如果您运行WinForms
应用程序(在 Windows 10 中),它将只使用100%
字体大小,并将渲染的图像拉伸到200%
大小。因此,您可以看到例如模糊的文本。如果图像被拉伸 - 屏幕坐标也必须被拉伸。
但这只是我的猜测,我不是这方面的专家。