如何制作出现在全屏窗口顶部的Cocoa窗口?

jam*_*her 8 macos cocoa objective-c

我需要在OS X的程序中创建一个"全屏叠加窗口".确切地说,窗口必须始终位于所有其他窗口的顶部,包括在非最大化窗口空间的菜单栏顶部,以及在他们自己的空间中最大化的窗户之上,以及在Exposé期间的顶部.它不得参与"变革空间"动画; 即,其位置必须始终相对于物理屏幕固定.(窗口将是半透明的,将忽略鼠标事件,但我知道如何执行此操作.)

如何实现这种"叠加窗口"行为?我到目前为止:

  • 我应该设置为window.level,CGWindowLevelKey(kCGMaximumWindowLevelKey)以便它始终位于同一空间中的其他窗口之上.
  • 我应该设置,NSWindowCollectionBehaviorStationary以便在Exposé期间窗口保持不动.

我不知道的是在切换空格时如何保持这种行为.我以为我应该设置NSWindowCollectionBehaviorCanJoinAllSpaces,但它的行为有两个问题:

  • 该窗口不会出现在其他全屏窗口的顶部.
  • 窗口在每个空间都是重复的,而不是停留在所有空间的顶部.这很重要,因为空间切换动画.

我听说过NSPanel会帮助我,但我也无法做到这一点.

简而言之,OS X中的全屏窗口顶部是否可以出现窗口?你能提供一个简短的例子吗?

rob*_*off 2

你应该使用window.level = CGWindowLevelForKey(.MaximumWindowLevelKey).

我无法帮助你处理空格部分。