NSTrackingArea mit Vollbild-Fenster / Ansicht
-
19-09-2019 - |
Frage
Ich versuche, eine NSTrackingArea in eine Vollbild-Ansicht zu installieren, um Mausereignisse bewegten zu erhalten.
Jedes Mal, wenn ich es tue, erhalte ich eine Behauptung Fehler. Ich habe das Web durchsucht, aber nicht in der Lage gewesen, alle führen zu finden.
*** Assertion failure in -[_NSFullScreenWindow _setTrackingRect:inside:owner:userData:useTrackingNum:install:], /SourceCache/AppKit/AppKit-1038.25/AppKit.subproj/NSWindow.m:3944
Hier ist der Code, der den Tracking-Bereich (x = 1.024, y = 768) einrichtet:
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];
Die Behauptung geschieht direkt nach dem Aufruf enterFullScreenMode: withOptions:
got Wer irgendwelche Ideen? Ist dies nicht der Ansatz, den ich nehmen sollte Maus in einem Vollbild-Fenster bewegt Ereignisse zu bekommen?
Lösung 2
So ist die Antwort auf diese Frage stellte sich heraus, um einen Fehler in meinem eigenen Code zu sein.
Wenn die NSTrackingArea Initialisierung, ich war für Besitzer im falschen Objekt übergeben. Die richtige Sache zu passieren war die NSView. Damit korrigiert, da alle Arbeiten erwartet.
Andere Tipps
Wenn Sie mit der Maus in der ganzen Sicht verfolgen wollen, ich denke, dass ist einfacher, die mouseDown:
, mouseMoved:
und mouseUp:
Methoden zu implementieren, um die Mausereignisse zu erhalten.