Domanda

Sto cercando di installare un NSTrackingArea in una vista a schermo intero al fine di ottenere il mouse spostato eventi.

Tuttavia, ogni volta che faccio, ottengo un errore di asserzione. Ho cercato sul web, ma non sono stati in grado di trovare qualche indizio.

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

Ecco il codice che imposta l'area di tracciamento (x = 1024, 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'affermazione avviene subito dopo la chiamata a enterFullScreenMode: withOptions:

Qualcuno ha qualche idea? Non è questo l'approccio dovrei prendere per ottenere il mouse spostato gli eventi in una finestra a schermo intero?

È stato utile?

Soluzione 2

Quindi, la risposta a questa domanda si è rivelata essere un bug nel mio codice.

Quando si inizializza il NSTrackingArea, stavo passando l'oggetto sbagliato immobiliare. La cosa giusta da passare era il NSView. Con questo corretto, tutte le opere come previsto.

Altri suggerimenti

Se si desidera tenere traccia del mouse nella vista intera, credo sia sarà più facile per attuare le mouseDown:, mouseMoved: e mouseUp: metodi al fine di ottenere gli eventi del mouse.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top