C# 为什么赢了';我的鼠标光标不能随光标移动到我告诉它的地方。位置?

C# 为什么赢了';我的鼠标光标不能随光标移动到我告诉它的地方。位置?,c#,windows,winforms,C#,Windows,Winforms,我正在做一些关于剪切区域的鼠标光标操作,为此,我需要在屏幕上显示一个“假”光标。我的真实光标最终将被隐藏,只是稍微远离用户的假光标,给我一个缓冲区来执行剪切操作。但这并不重要 这太奇怪了。程序似乎公然无视我的命令。我有一些调试代码: Debug.WriteLine("1fake: " + fakeMouse.X + " " + fakeMouse.Y); Debug.WriteLine("1real: " + this.PointToClient(Cursor.Position).X + " "

我正在做一些关于剪切区域的鼠标光标操作,为此,我需要在屏幕上显示一个“假”光标。我的真实光标最终将被隐藏,只是稍微远离用户的假光标,给我一个缓冲区来执行剪切操作。但这并不重要

这太奇怪了。程序似乎公然无视我的命令。我有一些调试代码:

Debug.WriteLine("1fake: " + fakeMouse.X + " " + fakeMouse.Y);
Debug.WriteLine("1real: " + this.PointToClient(Cursor.Position).X + " " + this.PointToClient(Cursor.Position).Y);

int fmx = fakeMouse.X;
int fmy = fakeMouse.Y;

Cursor.Position = new Point(fmx, fmy);

Debug.WriteLine("2fake: " + fmx + " " + fmy);
Debug.WriteLine("2real: " + this.PointToClient(Cursor.Position).X + " " + this.PointToClient(Cursor.Position).Y);
这将导致调试器输出如下所示:

1fake: 489 497
1real: 490 500
2fake: 489 497
2real: 274 264 // I just set this to be EXACTLY The same as the value above it!?!

光标跳出了屏幕的另一部分,进入了屏幕的另一个完全不同的部分。我做了fmx,fmy的事情,只是为了把问题简化为纯整数坐标,但它仍然没有采用正确的参数。是不是在别的地方又被换了?我不明白。

光标。位置要求屏幕坐标中有一个点。如果您的点位于窗口或客户端坐标中,它将从您期望的位置偏移

您可能只需要调用
指向屏幕
。比如:

Cursor.Position = this.PointToScreen(new Point(fakeMouse.X, fakeMouse.Y));

这是因为您在写入输出之前正在使用PointToClient。光标位置相对于屏幕,而不是表单

非常感谢。这让我发疯。从我的代码中删除PointToClient位会产生更大的偏移量,这就是为什么我要使用它,但是PointToScreen工作得非常好!