为什么我的鼠标光标不会移动到我告诉Cursor.Position的位置?

时间:2009-07-30 01:02:59

标签: c# windows winforms

我正在对剪辑区域进行鼠标光标的操作,为此我需要在屏幕上显示“假”光标。我的真实光标最终将被隐藏,并且稍微偏离用户的假光标,为我提供缓冲区来执行剪切操作。但这并不重要。

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

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的事情只是将问题简化为纯整数坐标,但它仍然没有采取正确的参数。它是否以某种方式在其他地方再次被改变?我不明白。

2 个答案:

答案 0 :(得分:2)

Cursor.Position需要屏幕坐标中的一个点。如果您的点在窗口或客户坐标中,它将偏离您期望的位置。

您可能只需要致电PointToScreen。类似的东西:

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

http://msdn.microsoft.com/en-us/library/ms229598.aspx

答案 1 :(得分:1)

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