使用Cocoa在第二个显示器上全屏显示macOS窗口

12

我正在开发一款Cocoa Mac应用程序,需要在第二个显示器上全屏显示窗口/视图。

我知道如何创建一个可拖动到第二个显示器的窗口,但是我希望可以通过编程方式创建窗口并使其在外部显示器上全屏显示。

3个回答

12

首先,通过迭代 [NSScreen screens] 来确定要使用哪个屏幕。

使用以下代码创建全屏窗口:

NSScreen *screen = /* from [NSScreen screens] */
NSRect screenRect = [screen frame];
NSWindow *window = [[NSWindow alloc] initWithContentRect:screenRect
    styleMask:NSBorderlessWindowMask
    backing:NSBackingStoreBuffered
    defer:NO
    screen:screen];
[window setLevel: CGShieldingWindowLevel()];

你可能也想尝试谷歌搜索一下 CGDisplayCapture()


谢谢,那个方法很有效。由于我试图输出到辅助屏幕,所以我只需使用 [window setLevel: NSStatusWindowLevel]; - Austin

4
您可以调用NSViewenterFullScreenMode:withOptions:方法来实现所需的行为。
请参阅苹果文档
这里这里阅读可以提供给该方法的选项。
您可以使用[NSScreen screens]获取可用屏幕列表。有关详细信息,请参见此处

谢谢你的帮助。对于我想做的事情,我认为第一个解决方案对我来说最好,但我会记住那个全屏查看的方法。 - Austin

0

我认为全屏窗口动画不够流畅,效果也不好。全屏视图要更加平滑。

试试这个:

- (void)toggleMyViewFullScreen:(id)sender
{
    if (myView.inFullScreenMode) {
      [myView exitFullScreenModeWithOptions:nil];
    } else {
      NSApplicationPresentationOptions options =
          NSApplicationPresentationHideDock |       
          NSApplicationPresentationHideMenuBar;

      [myView enterFullScreenMode:[NSScreen mainScreen] withOptions:@{
             NSFullScreenModeApplicationPresentationOptions : @(options) }];
                                                                                 }];
    }
}

您可以将此连接到窗口菜单中的全屏菜单项(在将其插入到nib中后),但请确保更改菜单项触发的操作为toggleMyViewFullScreen:。或者,您可以在编程方式下调用toggleMyViewFullScreen,或者在应用程序加载时调用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接