2009-07-30 2 views
1

Je suis en train de manipuler le curseur de la souris en ce qui concerne les zones d'écrêtage, et pour ce faire j'ai besoin de montrer un "faux" curseur sur l'écran. Mon vrai curseur sera éventuellement caché, et légèrement décalé du faux curseur de l'utilisateur pour me donner un tampon pour préformer les opérations d'écrêtage. Mais ce n'est pas vraiment important.Pourquoi le curseur de ma souris ne bouge-t-il pas à l'endroit où je lui dis d'aller avec Cursor.Position?

C'est tellement bizarre. Il semble que le programme ignore de manière flagrante mes commandes. J'ai un code de débogage:

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

Et cela se traduit par la sortie du débogueur comme ceci:

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

Le curseur se sortir de la route, dans une partie complètement différente de l'écran. J'ai fait les choses de fmx, fmy juste pour réduire le problème aux coordonnées entières pures mais il ne prend toujours pas les bons paramètres. Est-ce que ça change encore quelque part ailleurs? Je ne comprends pas.

Répondre

2

Cursor.Position attend un point dans les coordonnées de l'écran. Si votre point est dans les coordonnées de la fenêtre ou du client, il sera décalé d'où vous vous attendez. Vous devez probablement appeler PointToScreen. Quelque chose comme:

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

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

+0

Merci beaucoup. Cela m'a rendu fou. La suppression du bit PointToClient de mon code a fait un décalage encore plus grand, c'est pourquoi je l'utilisais, mais PointToScreen fonctionne parfaitement! – cksubs

1

Ceci est parce que vous utilisez PointToClient avant d'écrire la sortie. La position du curseur est relative à l'écran et non à votre forme

Questions connexes