2009-04-17 7 views
1

J'ai quelques vues alignées dans les grilles en vue parent (Tout son être NSView)continuer à suivre événement glisser la souris, même après le curseur se déplace hors du film

Je suis PRÉPONDÉRANTS - (void) mouseDown: (NSEvent *) événement - (void) mouseDragged: (NSEvent *) theEvent pour un dessin personnalisé dans la sous-classe de vue enfant

Pour être précis, je dessine des rectangles pendant le déplacement de la souris dans les vues enfant. Problème: lorsque le curseur sort de la vue enfant (pendant le déplacement de la souris), je ne suis évidemment pas capable de suivre l'événement et je ne peux donc pas redimensionner le rectangle. Je veux suivre les mouvements de la souris, même en dehors de la fenêtre de l'application ... (pour l'instant que l'événement de déplacement)

Y at-il de façon évidente ou complexe pour y parvenir .....

Merci à l'avance

Rajesh

Répondre

2
- (void)mouseDown:(NSEvent *)theEvent 
{ 
    NSPoint point; 
    while (1) { 
     theEvent = [[self window] nextEventMatchingMask: (NSLeftMouseDraggedMask | NSLeftMouseUpMask)]; 
     point = [self convertPoint: [theEvent locationInWindow] fromView: nil]; 

     // do something with point 

     if ([theEvent type] == NSLeftMouseUp) 
      break; 
    } 
} 
+0

merci 'cocoafan', fonctionne comme un charme. –

1

Je veux présenter une alternative à la réponse acceptée qui n'implique pas interceptant les événements dans une boucle while.

gérer l'événement traîné de la souris:

- (void)mouseDragged:(NSEvent *)theEvent 
{ 
} 

Ce sera le feu si vous commencez un frein à l'intérieur d'un NSView et continuera de tirer si vous faites glisser la souris à l'extérieur.

Questions connexes