【问题标题】:Mac OS X, make a window go over menu barMac OS X,让一个窗口越过菜单栏
【发布时间】:2011-07-21 07:14:25
【问题描述】:

是否可以在不进入全屏的情况下创建一个窗口以越过菜单栏?

提前致谢!

【问题讨论】:

    标签: cocoa macos nswindow menubar


    【解决方案1】:

    是的,很简单:

    window.level = NSMainMenuWindowLevel + 1;
    

    (参考:Drawing to the Full ScreenMac OS X 的 OpenGL 编程指南。)

    sebastianmarkow 是正确的,因为这对于普通文档窗口来说是一种可怕的行为,但有几种窗口类型是正常的:光标、工具提示和 Xscope 等特殊实用程序。

    【讨论】:

    • 仍然没有越过菜单栏。
    • 请澄清。具有该窗口级别的窗口确实在菜单栏顶部排序,但 AppKit 不会让您将标题窗口放置在与菜单栏重叠的位置(除非在一些非常奇怪的多屏幕情况下)。如果您想使用文档样式的窗口执行此操作,那么据我所知,您很不走运。
    【解决方案2】:

    我喜欢 Jens Ayton 的回答,但与其选择这样的任意数字,我认为您最好使用定义的常量之一。

    就我个人而言,我使用NSPopUpMenuWindowLevel

    self.window.level = NSPopUpMenuWindowLevel;
    

    在我发布此答案时,您可能更喜欢的其他常量包括:

    • NSNormalWindowLevel
    • NSFloatingWindowLevel
    • NSSubmenuWindowLevel
    • NSNormalWindowLevel
    • NSMainMenuWindowLevel
    • NSStatusWindowLevel
    • NSModalPaneWindowLevel
    • NSPopUpMenuWindowLevel
    • NSScreenSaverWindowLevel

    这是参考(Apple 多年来倾向于改变他们组织文档的方式并断开这些链接,但 API 并没有太大变化,这就是我在上面列出该列表的原因。我怀疑此链接是否有效3 年左右,但这些常数在未来 20 年内可能不会有太大变化。)

    https://developer.apple.com/library/mac/documentation/cocoa/reference/applicationkit/classes/NSWindow_Class/Reference/Reference.html#//apple_ref/doc/constant_group/Window_Levels

    【讨论】:

    • 令人惊讶的是,自从我发布此答案以来已经将近 4 年了,并且链接仍然有效。也许苹果改变了他们的方式,最终停止了重新排列和断开链接......
    【解决方案3】:

    我不相信你可以进入菜单栏的顶部,但是你可以通过调用将菜单栏设置为当你的应用程序是最前面的应用程序时自动隐藏

    [[NSApplication sharedApplication] setPresentationOptions: NSApplicationPresentationAutoHideMenuBar];
    

    这应该让您在应用程序中使用通常用于菜单栏的空间。

    【讨论】:

    • 来自文档:“如果您指定NSApplicationPresentationAutoHideMenuBar,则必须伴随NSApplicationPresentationHideDockNSApplicationPresentationAutoHideDock。”否则会引发异常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-20
    相关资源
    最近更新 更多