代码之家  ›  专栏  ›  技术社区  ›  wadesworld

带全屏窗口/视图的nstrackingarea

  •  1
  • wadesworld  · 技术社区  · 14 年前

    我正在尝试将nstrackingarea安装到全屏视图中,以便获得鼠标移动的事件。

    但是,每当我这样做时,都会得到一个断言错误。我在网上搜索过,但找不到任何线索。

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

    这是设置跟踪区域的代码(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];
    

    断言发生在调用enterFullScreenMode:WithOptions之后:

    有人有什么想法吗?这不是我在全屏窗口中获取鼠标移动事件时应该采用的方法吗?

    2 回复  |  直到 14 年前
        1
  •  0
  •   Laurent Etiemble    14 年前

    如果你想在整个视图中跟踪鼠标,我想是更容易实现 mouseDown: , mouseMoved: mouseUp: 方法以获取鼠标事件。

        2
  •  0
  •   wadesworld    14 年前

    所以这个问题的答案在我自己的代码中是一个bug。

    初始化nstrackingarea时,我为owner传入了错误的对象。应该通过的是nsview。更正后,一切都按预期工作。