1

我正在 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];

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

有什么问题?

谢谢!

4

2 回答 2

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];
于 2013-03-18T09:13:21.163 回答
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];

杰感谢您的支持;)

于 2013-03-25T13:40:27.650 回答