在二级屏幕上显示NSWindow

时间:2015-02-07 22:17:21

标签: cocoa

我想在辅助监视器上全屏显示在故事板中创建的NSWindow。以下代码导致窗口显示在主屏幕/主屏幕上。 Y原点是好的,但X原点是0,它应该是-1680。下面的代码在Yosemite之前有效。

NSScreen *screen = [[NSScreen screens] objectAtIndex:2];
NSRect mainDisplayRect = [screen frame];
[PresenterWindow setFrame: mainDisplayRect display:YES animate:YES];
[PresenterWindow makeKeyAndOrderFront:sender];
[PresenterWindow setLevel: CGShieldingWindowLevel()];

我也尝试过以下相同的结果:

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

请告知我如何解决这个问题。

我尝试过其他一些问题的解决方案:

我有一些新观察:

如果我在我的NSWindow的故事板中激活“启动时启动”,则在我的辅助监视器上全屏查看该窗口。如果我然后执行orderOut并运行上面的代码,则会以正确的大小查看窗口,但是在我的主/主屏幕上。窗口未激活为“关闭时释放”。因此,当我取消激活“启动时启动”时,将再次在主/主屏幕中查看具有辅助屏幕大小的窗口。

1 个答案:

答案 0 :(得分:2)

几天后我开始工作了:

故事板中的NSWindow标有" Start at Startup"

在applcationDidFinishLaunching中我写了以下内容:

[PresenterWindow setLevel: NSNormalWindowLevel];
[PresenterWindow orderOut:self];

要打开全屏我使用了这个:

NSScreen *screen = [[NSScreen screens] objectAtIndex:1];
NSRect mainDisplayRect = [screen frame];
[PresenterWindow setFrame: mainDisplayRect display:YES animate:YES];
[PresenterWindow setLevel: CGShieldingWindowLevel()];
[PresenterWindow makeKeyAndOrderFront:screen];

关闭全屏并能够再次正确打开全屏:

[PresenterWindow setLevel: NSNormalWindowLevel];
[PresenterWindow orderOut:(sender)];