如何知道NSWindow在Mac OS X Lion中是否全屏?

时间:2011-07-25 12:12:36

标签: cocoa fullscreen nswindow osx-lion nsapplication

我想我应该检查[NSApplication presentationOptions]是否包含NSFullScreenModeApplicationPresentationOptions,但我该如何实现?

编辑:使用[NSApplication presentationOptions]不能像在我的基于文档的应用程序中那样,全屏可能会有一些文档而其他文档则没有。我现在正在寻找另一种解决方案。我想知道为什么没有一个名为[NSWindow isFullscreen]的属性或类似的东西。

4 个答案:

答案 0 :(得分:30)

我只是在寻找一个解决方案,根据Matthieu的回答,我在NSWindow上创建了一个适合我的类别。

@interface NSWindow (FullScreen)

- (BOOL)mn_isFullScreen;

@end

@implementation NSWindow (FullScreen)

- (BOOL)mn_isFullScreen
{
    return (([self styleMask] & NSFullScreenWindowMask) == NSFullScreenWindowMask);
}

@end

答案 1 :(得分:10)

你需要使用&按位运算符来测试正在使用该选项。 没有经过测试,但可能是这样的:

- (BOOL) inFullScreenMode {
    NSApplicationPresentationOptions opts = [[NSApplication sharedApplication ] presentationOptions];
    if ( opts & NSApplicationPresentationFullScreen) {
       return YES;
    }
    return NO;
}

要查看是否有任何窗口处于全屏模式,只需检查窗口的样式掩码。

NSUInteger masks = [someNSWindow styleMask]
if ( masks & NSFullScreenWindowMask) {
 // Do something
}

答案 2 :(得分:2)

对于Swift 3.0

if let window = NSApp.mainWindow {
    let isWindowFullscreen = window.styleMask.contains(NSFullScreenWindowMask)
}

显然,对于原始问题,您可以使用您想要检查的文档窗口替换NSApp.mainWindow

答案 3 :(得分:0)

我在10.7之前的版本(NSApplicationPresentationFullScreenNSFullScreenWindowMask都不可用)中的处理方式是检查

if ([mainWindow frame].size.height == [[mainWindow screen] frame].size.height)
{
    // window is fullscreen
}

这一段真正的旧代码似乎不仅可以在“ Lion”上运行,而且在今天(在编写10.14.x-OS时)也可以运行。

相关问题