【发布时间】:2011-07-21 07:14:25
【问题描述】:
是否可以在不进入全屏的情况下创建一个窗口以越过菜单栏?
提前致谢!
【问题讨论】:
标签: cocoa macos nswindow menubar
是否可以在不进入全屏的情况下创建一个窗口以越过菜单栏?
提前致谢!
【问题讨论】:
标签: cocoa macos nswindow menubar
是的,很简单:
window.level = NSMainMenuWindowLevel + 1;
(参考:Drawing to the Full Screen,Mac OS X 的 OpenGL 编程指南。)
sebastianmarkow 是正确的,因为这对于普通文档窗口来说是一种可怕的行为,但有几种窗口类型是正常的:光标、工具提示和 Xscope 等特殊实用程序。
【讨论】:
我喜欢 Jens Ayton 的回答,但与其选择这样的任意数字,我认为您最好使用定义的常量之一。
就我个人而言,我使用NSPopUpMenuWindowLevel:
self.window.level = NSPopUpMenuWindowLevel;
在我发布此答案时,您可能更喜欢的其他常量包括:
NSNormalWindowLevel NSFloatingWindowLevel NSSubmenuWindowLevelNSNormalWindowLevelNSMainMenuWindowLevelNSStatusWindowLevelNSModalPaneWindowLevelNSPopUpMenuWindowLevelNSScreenSaverWindowLevel这是参考(Apple 多年来倾向于改变他们组织文档的方式并断开这些链接,但 API 并没有太大变化,这就是我在上面列出该列表的原因。我怀疑此链接是否有效3 年左右,但这些常数在未来 20 年内可能不会有太大变化。)
【讨论】:
我不相信你可以进入菜单栏的顶部,但是你可以通过调用将菜单栏设置为当你的应用程序是最前面的应用程序时自动隐藏
[[NSApplication sharedApplication] setPresentationOptions: NSApplicationPresentationAutoHideMenuBar];
这应该让您在应用程序中使用通常用于菜单栏的空间。
【讨论】:
NSApplicationPresentationAutoHideMenuBar,则必须伴随NSApplicationPresentationHideDock 或NSApplicationPresentationAutoHideDock。”否则会引发异常。