C# 设置光标位置 - WinForms 和 WPF 的结果不同



我有一个奇怪的问题。我正在尝试使用 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%大小。因此,您可以看到例如模糊的文本。如果图像被拉伸 - 屏幕坐标也必须被拉伸。

但这只是我的猜测,我不是这方面的专家。

最新更新