2011-07-25 104 views
13

我想我應該檢查是否[NSApplication presentationOptions]包含NSFullScreenModeApplicationPresentationOptions,但我該如何實現這一目標?如何知道NSWindow在Mac OS X Lion中是否全屏?

編輯:使用[NSApplication presentationOptions]不起作用,因爲在我的基於文檔的應用程序可能有一些文件在全屏和其他沒有。我現在正在尋找另一種解決方案。我想知道爲什麼沒有名爲或類似的東西。

回答

30

我只是在尋找一個解決方案自己和基於馬修的答案我創建了NSWindow類別爲我工作得很好。

@interface NSWindow (FullScreen) 

- (BOOL)mn_isFullScreen; 

@end 

@implementation NSWindow (FullScreen) 

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

@end 
10

您需要使用&按位運算符來測試是否正在使用該選項。 未經測試,但可能是這樣的:

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

,看看是否有您的Windows是在全屏模式下只需選中窗口式面膜。

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

謝謝,這正是我所需要的。只需要一次更正:使用'NSApp'而不是'NSApplication',否則您會收到警告。哦...當然' - (BOOL)inFullScreenMode()'應該寫成' - (BOOL)inFullScreenMode'。 – Nickkk

+0

不幸的是,現在有一個問題:我在基於文檔的應用程序,使用上述解決方案不會因爲有些人可能被全屏的文件和其他人沒有的工作。其他解決方案? – Nickkk

+0

只需檢查所有窗口的樣式掩碼。我已經添加了一些示例代碼。 –

2

對於雨燕3.0

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

顯然,對於原來的問題,你會替換NSApp.mainWindow與哪個文檔窗口你想檢查。