【问题标题】:Cocoa fullscreen window on secondary display辅助显示器上的 Cocoa 全屏窗口
【发布时间】:2011-01-04 10:24:30
【问题描述】:

我有以下代码,除了我永远看不到我创建的myWindow 之外,这些代码大部分都可以工作。如果我这样做[myWindow isVisible],它会返回1。 CGDisplayCapture 工作正常,因为它使屏幕空白。我已经检查了我传递给 NSWindow init 方法的所有变量。

我是否遗漏了一些非常明显的东西?代码如下:

// Find the screen we want
NSScreen *screen                = [[NSScreen screens] objectAtIndex:1];
NSNumber *displayID             = [[screen deviceDescription] 
                                  objectForKey:@"NSScreenNumber"];
CGDirectDisplayID CGDisplayID   = (CGDirectDisplayID) [displayID intValue];

// Capture the secondary display
if (CGDisplayCapture( CGDisplayID ) != kCGErrorSuccess) {
  NSLog( @"Couldn't capture the secondary display" );
}

// Draw a new window to fill the screen
NSRect screenRect = [screen frame];
NSWindow *myWindow = [[NSWindow alloc] initWithContentRect:screenRect
                                               styleMask:NSBorderlessWindowMask
                                                 backing:NSBackingStoreBuffered
                                                   defer:NO
                                                  screen:screen];

// Set the level of the new window and other settings
NSInteger windowLevel = CGShieldingWindowLevel();
[myWindow setLevel: windowLevel];
[myWindow setBackgroundColor:[NSColor blueColor]];
[myWindow makeKeyAndOrderFront:nil];

干杯

【问题讨论】:

    标签: cocoa fullscreen nswindow


    【解决方案1】:

    如果您需要 10.5 或更高版本,请使用 NSView 的 -enterFullScreenMode:withOptions: 和匹配的 -exitFullScreenModeWithOptions:。这将责任适当地转移到容器视图(它仍然可以有自己的复杂子视图集),并使您摆脱手动弄乱窗口级别等的一些陷阱。

    【讨论】:

      【解决方案2】:

      如果您不将其设为全屏,此窗口会是什么样子?

      我没有看到您向正在创建的窗口添加任何视图。如果你的窗口的内容视图是一个 NSView 实例,它不会做任何绘图。

      【讨论】:

      • 如果我只是运行[[NSWindow alloc] init];,那么我会出现一个蓝色的小窗口。所以也许是那种方法,但screenRect 和screen 没问题,因为我已经使用NSLog 进行了检查。
      • 很久没有按照你的方式制作全屏窗口了。是否有某些原因为什么您不只是将 -enterFullScreenMode:withOptions: 发送到包含您要绘制的任何内容的视图?
      • 不这么认为,但您肯定需要创建一个窗口来包含视图,您肯定不能在没有窗口的情况下使视图全屏吗?我将[NSScreen mainScreen] 传递到屏幕参数中并且有效,所以我需要弄清楚为什么它不喜欢NSScreen 我发送它,因为当我想要辅助显示时使用mainScreen 并不那么可靠。如果这不起作用,我将尝试查看解决方案。谢谢你的帮助。
      猜你喜欢
      • 2010-09-28
      • 1970-01-01
      • 2010-10-19
      • 2014-12-04
      • 2011-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多