Cocoa在第二个屏幕上打开一个全屏窗口,保持应用程序在第一个屏幕上可见

时间:2013-03-14 15:56:33

标签: cocoa fullscreen nswindow

我正在开发OSX 10.7上的应用程序,我正在尝试,目标是在第二个屏幕上打开一些图像,而应用程序必须在第一个屏幕上正常运行。

所以代码如下:

NSScreen *screen = [[NSScreen screens] objectAtIndex:1];

fullScreenWindow = [[NSWindow alloc] initWithContentRect:[screenFrame]
                                               styleMask:NSBorderlessWindowMask
                                                 backing:NSBackingStoreBuffered
                                                   defer:NO
                                                  screen:screen];
[fullScreenWindow setLevel: NSMainMenuWIndowLevel + 1];
[fullScreenWindow setOpaque: YES];
[fullScreenWindow setBackgroundColor:[NSColor yellowColor]];

fullScreenView = [[NSView alloc] initWithFrame:NSMakeRect(0.0f, 0.0f, fullScreenWindow.frame.size.width, fullScreenWindow.frame.size.height)];
// Adding a test button
NSButton *testButton = [[NSButton alloc] initWithFrame(50.0f, 50.0f, 100.0f, 50.0f)];
[testButton setTarget:self];
[testButton setAction:@selector(closeExternalWindow)];
[fullScreenView addSubview:testButton];

// Present the fullscreen window
[fullScreenWindow.contentView addSubview:fullScreenView];
[fullScreenWindow makeKeyAndOrderFront:self];

通过这种方式,在第一个屏幕上正确显示了应用程序,但在第二个屏幕上,我只看到一个全屏黑色窗口。

问题是什么?

谢谢!

2 个答案:

答案 0 :(得分:1)

阅读Apple的initWithContentRect:styleMask:backing:defer:screen:文档,指出屏幕参数..

  

指定在主屏幕以外的屏幕中绘制窗口时绘制窗口内容矩形的位置。内容   矩形相对于屏幕的左下角绘制。

因此,当使用[screen frame]时,您实际上是将其从第二个屏幕移开,因为定位已经相对于该屏幕。

为了使其显示在预期的位置,您可以更改代码,例如到

[[NSWindow alloc] initWithContentRect:NSMakeRect(0, 0, [screen frame].size.width, [screen frame].size.height)
                            styleMask:NSBorderlessWindowMask
                              backing:NSBackingStoreBuffered
                                defer:NO
                               screen:screen];

答案 1 :(得分:0)

几天之后,我有可能再次使用此代码,现在它可以工作:

NSScreen *screen = [[NSScreen screens] objectAtIndex:1];
NSRect mainDisplayRect = [screen frame];
fullScreenWindow = [[NSWindow alloc] initWithContentRect: mainDisplayRect styleMask:NSBorderlessWindowMask
                                                 backing:NSBackingStoreBuffered defer:YES];
[fullScreenWindow setLevel:NSMainMenuWindowLevel+1];
[fullScreenWindow setOpaque:YES];
[fullScreenWindow setHidesOnDeactivate:YES];
[fullScreenWindow setBackgroundColor:[NSColor redColor]];

NSRect viewRect = NSMakeRect(0.0, 0.0, mainDisplayRect.size.width, mainDisplayRect.size.height);
fullScreenView = [[PresenterView alloc] initWithFrame:viewRect];
[fullScreenWindow setContentView: fullScreenView];
[fullScreenWindow makeKeyAndOrderFront:self];

周杰伦,谢谢你的支持;)

相关问题