我需要在OS X的程序中创建一个“全屏叠加窗口”。确切地说,窗口必须始终位于所有其他窗口的顶部,包括在非最大化窗口的菜单栏顶部空间,在自己空间的最大化窗户之上,以及在Exposé期间的顶部。它不得参与“变革空间”动画;即,其位置必须始终相对于物理屏幕固定。 (窗口将是半透明的,将忽略鼠标事件,但我知道如何执行此操作。)
如何实现这种“叠加窗口”行为?我到目前为止:
window.level
设置为CGWindowLevelKey(kCGMaximumWindowLevelKey)
,以便它始终位于同一空间中的其他窗口之上。NSWindowCollectionBehaviorStationary
,以便在Exposé期间窗口保持不变。我不知道在切换空格时如何保持这种行为。我以为我应该设置NSWindowCollectionBehaviorCanJoinAllSpaces
,但它的行为有两个问题:
I have heard that an NSPanel
would help me,但我也无法做到这一点。
简而言之, OS X中的全屏窗口顶部是否可以显示一个窗口?你能提供一个简短的完整例子吗?
答案 0 :(得分:1)
您应该使用window.level = CGWindowLevelForKey(.MaximumWindowLevelKey)
。
我无法帮助你处理空间部分。
答案 1 :(得分:0)
这是我的解决方案,它运作正常。
NSPanel *test_panel = [[NSPanel alloc] initWithContentRect:NSMakeRect(300, 300, 500, 500) styleMask:NSTitledWindowMask|NSClosableWindowMask backing:NSBackingStoreBuffered defer:YES];
[test_panel setReleasedWhenClosed:YES];
[test_panel setHidesOnDeactivate:NO];
[test_panel setFloatingPanel:YES];
[test_panel setStyleMask:NSBorderlessWindowMask | NSNonactivatingPanelMask];
[test_panel setLevel:kCGMainMenuWindowLevel-1];
[test_panel setCollectionBehavior:NSWindowCollectionBehaviorCanJoinAllSpaces|NSWindowCollectionBehaviorFullScreenAuxiliary];
[test_panel setCanBeVisibleOnAllSpaces:YES];
[test_panel center];
[test_panel orderFront:nil];