2011-09-18 3 views
8

Je peux utiliser [NSEvent mouseLocation] pour obtenir l'emplacement du curseur, mais cela me donne les coordonnées de l'écran. Comment puis-je obtenir les coordonnées du curseur par rapport à la vue, quand elle est dedans? J'ai cherché dans la documentation Apple et je n'ai pas trouvé de réponse.Comment obtenir la position du curseur par rapport à la fenêtre dans Mac OS X?

Si cela fait une différence, je voudrais récupérer en permanence la position de la souris car elle sera utilisée dans chaque mise à jour de trame.

Répondre

7
- (void)mouseMoved:(NSEvent *)event 
{ 
    NSPoint locationInView = [self convertPoint:[event locationInWindow] 
             fromView:nil]; 
} 

Assurez-vous également que vous avez activé les événements mouseMoved:

[window setAcceptsMouseMovedEvents:YES]; 
+0

'theEvent' devrait être' event', je pense. – smacdonald

+1

Édité, merci. – omz

7
NSPoint myPoint = 
    [myView convertPoint:[myWindow convertScreenToBase:[NSEvent mouseLocation]] 
       fromView:nil]; 
+0

'convertScreenToBase' est obsolète – rraallvv

9

Pour être complet, il est un moyen direct pour obtenir la position de la souris dans la fenêtre des coordonnées (à l'aide NSWindow). Selon la disposition de votre fenêtre, cela peut être équivalent aux coordonnées de la vue.

NSWindow *myWindow; 
NSPoint mousePos; 
... 
mousePos = [myWindow mouseLocationOutsideOfEventStream]; 

Les coordonnées sont renvoyés dans la fenêtre co-ords, de sorte que si la souris est à gauche du/au-dessous de la fenêtre, puis une valeur négative est renvoyée. Si la souris est à droite ou au-dessus de la fenêtre, la coordonnée dépassera la taille de la fenêtre.

Questions connexes