【发布时间】:2016-04-09 16:20:50
【问题描述】:
我需要在 OS X 的程序中创建一个“全屏覆盖窗口”。确切地说,该窗口必须始终位于所有其他窗口的顶部,包括非最大化窗口中的菜单栏顶部空间,以及在他们自己的空间中最大化的窗户顶部,以及在 Exposé 期间的顶部。不得参与“改变空间”动画;即,它的位置必须始终相对于物理屏幕固定。 (窗口将是半透明的,并且会忽略鼠标事件,但我已经知道该怎么做。)
如何实现这种“覆盖窗口”行为?我已经走到这一步了:
- 我应该将
window.level设置为CGWindowLevelKey(kCGMaximumWindowLevelKey),以便它始终位于同一空间中其他窗口的顶部。 - 我应该设置
NSWindowCollectionBehaviorStationary以便在 Exposé 期间窗口保持原位。
我不知道在切换空间时如何保持这种行为。我以为我应该设置NSWindowCollectionBehaviorCanJoinAllSpaces,但它的行为有两个问题:
- 该窗口不会出现在其他全屏窗口之上。
- 窗口在每个空间上重复,而不是在所有空间顶部的同一位置。这很重要,因为空间切换动画。
I have heard that an NSPanel would help me,但我也无法完成这项工作。
简而言之,一个窗口可以出现在 OS X 中的全屏窗口之上吗?您能提供一个简短的完整示例吗?
【问题讨论】:
-
我不认为你已经找到了答案?我还需要在另一个应用的全屏窗口之上显示一个窗口。
-
@MarkBessey 我确实找到了解决方案,使用
NSPanel。有空我会尝试用一些示例代码来回答这个问题 -
@jameshfisher 你能分享你的解决方案吗?我有一个类似的问题,我已经尝试过你在描述中提到的,但不幸的是它们不起作用。
-
@jameshfisher 如果您有空,您介意分享您的解决方案吗,我真的需要它。
-
又一个小问题,有人解决了吗?
标签: objective-c macos cocoa