2010-02-07 2 views
1

Я пытаюсь установить NSTrackingArea в полноэкранный режим, чтобы получать события с перемещением мыши.NSTrackingArea с полноэкранным окном/представлением

Однако, когда бы то ни было, я получаю сообщение об ошибке утверждения. Я искал в Интернете, но не смог найти никаких ссылок.

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

Вот код, который устанавливает область слежения (х = 1024, у = 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]; 

Утверждение происходит сразу после вызова enterFullScreenMode: withOptions:

Любой есть идеи? Разве это не тот подход, который я должен предпринять, чтобы получать события с перемещением мыши в полноэкранном окне?

ответ

0

Таким образом, ответ на этот вопрос оказался ошибкой в ​​моем собственном коде.

При инициализации NSTrackingArea я передал неправильный объект владельцу. Правильная вещь, чтобы пройти, была NSView. С учетом этого все работает так, как ожидалось.

0

Если вы хотите отследить мышь на весь вид, я думаю, будет проще реализовать методы mouseDown:, mouseMoved: и mouseUp:, чтобы получить события мыши.

+0

Эти методы реализованы, но они не вызываются, когда окно полноэкранное. – wadesworld

+1

Существует пример приложения, в котором вы можете посмотреть: http://developer.apple.com/mac/library/samplecode/GeekGameBoard/index.html (он использует подкласс NSView, а не OpenGL). –

+1

Убедитесь, что вы вызываете '[[glView window] setAcceptsMouseMovedEvents: YES]', если вы хотите использовать '-mouseMoved:'. –

Смежные вопросы