2009-07-30 7 views
1

Ich mache eine Manipulation des Mauszeigers in Bezug auf Clipping-Bereiche, und zu diesem Zweck muss ich einen "falschen" Cursor auf dem Bildschirm zeigen. Mein wahrer Cursor wird schließlich ausgeblendet und nur geringfügig vom falschen Cursor des Benutzers entfernt, um mir einen Puffer zu geben, um Clipping-Operationen durchzuführen. Aber das ist nicht wirklich wichtig.Warum bewegt sich mein Mauszeiger nicht dorthin, wo ich sage, dass er mit Cursor.Position gehen soll?

Das ist so komisch. Es scheint, als würde das Programm meine Befehle ignorieren. Ich habe einige Debug-Code:

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); 

Und dies führt zu Debugger Ausgabe wie folgt:

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!?! 

Der Cursor springt Art und Weise aus dem Weg, in einem ganz anderen Teil des Bildschirms. Ich habe die fmx, einige Dinge gemacht, um das Problem auf reine ganzzahlige Koordinaten zu reduzieren, aber es nimmt immer noch nicht die richtigen Parameter. Wird es irgendwo anders wieder verändert? Ich verstehe nicht.

Antwort

2

Cursor.Position erwartet einen Punkt in Bildschirmkoordinaten. Wenn sich Ihr Punkt in Fenster- oder Client-Koordinaten befindet, wird er von der erwarteten Position versetzt.

Sie müssen wahrscheinlich nur PointToScreen anrufen. Etwas wie:

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

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

+0

Vielen Dank. Das hat mich verrückt gemacht. Das Entfernen des PointToClient-Bits aus meinem Code machte einen noch größeren Offset, weshalb ich es verwendete, aber PointToScreen funktioniert perfekt! – cksubs

1

Dies liegt daran, Sie PointToClient verwenden, bevor die Ausgabe zu schreiben. Die Cursorposition ist relativ zum Bildschirm und nicht zu Ihrem Formular

Verwandte Themen