2010-02-07 8 views
1

J'essaye d'installer un NSTrackingArea dans une vue en plein écran afin d'obtenir des événements déplacés par la souris. Cependant, chaque fois que je le fais, j'obtiens une erreur d'assertion. J'ai cherché sur le web, mais je n'ai pas trouvé de piste.NSTrackingArea avec fenêtre/vue plein écran

*** Assertion failure in -[_NSFullScreenWindow _setTrackingRect:inside:owner:userData:useTrackingNum:install:], /SourceCache/AppKit/AppKit-1038.25/AppKit.subproj/NSWindow.m:3944 

Voici le code qui définit la zone de suivi (x = 1 024, y = 768):

cocoaWindow = [[NSWindow alloc] initWithContentRect:NSMakeRect(0.0, 0.0, x,y) 
               styleMask: NSTitledWindowMask 
               backing: NSBackingStoreBuffered 
                defer:NO]; 
    glView = [[WLMacGLView alloc] initWithFrame:NSMakeRect(0.0, 0.0, x,y) pixelFormat:[WLMacGLView defaultPixelFormat]]; 
    [glView setCocoaController:self]; 

    //add the glView as a subview of the window's content view 
    [[cocoaWindow contentView] addSubview:glView]; 
    NSRect r = [glView frame]; 
    NSTrackingArea *track = [[NSTrackingArea alloc] initWithRect:r options: NSTrackingMouseMoved | NSTrackingActiveWhenFirstResponder | NSTrackingActiveInKeyWindow 
            owner:self userInfo:nil]; 
    [glView addTrackingArea:track]; 
    [glView enterFullScreenMode:[NSScreen mainScreen] withOptions:nil]; 
    [glView createContext]; 

L'affirmation se produit juste après l'appel à enterFullScreenMode: withOptions:

Toute personne Vous avez des idées? Est-ce que ce n'est pas l'approche que je devrais prendre pour obtenir des événements déplacés par la souris dans une fenêtre en plein écran?

Répondre

0

Donc la réponse à cette question s'est révélée être un bug dans mon propre code. Lors de l'initialisation de NSTrackingArea, je passais dans le mauvais objet pour le propriétaire. La bonne chose à passer était le NSView. Avec cela corrigé, tout fonctionne comme prévu.

0

Si vous souhaitez suivre la souris dans la vue l'ensemble, je pense est sera plus facile à mettre en œuvre les méthodes mouseDown:, mouseMoved: et mouseUp: afin d'obtenir les événements de souris.

+0

Ces méthodes sont implémentées, mais elles ne sont pas appelées lorsque la fenêtre est en plein écran. – wadesworld

+1

Il existe un exemple d'application que vous pouvez consulter: http://developer.apple.com/mac/library/samplecode/GeekGameBoard/index.html (il utilise une sous-classe NSView et non une OpenGL). –

+1

Assurez-vous que vous appelez '[[glView window] setAcceptsMouseMovedEvents: YES]' si vous voulez utiliser '-mouseMoved:'. –