【问题标题】:Display NSWindow on secondary screen在辅助屏幕上显示 NSWindow
【发布时间】:2015-09-14 09:14:27
【问题描述】:

我想在辅助监视器上全屏显示在情节提要中创建的NSWindow。下面的代码导致窗口显示在主屏幕/主屏幕上。 Y 原点没问题,但 X 原点为 0,应为 -1680。下面的代码在优胜美地之前工作。

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 并运行上面的代码,窗口将以正确的大小查看,但在我的主/主屏幕上。该窗口未激活为“关闭时释放”。因此,当我停用“启动时启动”时,将再次在主屏幕/主屏幕中以辅助屏幕的大小查看窗口。

【问题讨论】:

  • 在订购之前尝试设置窗口级别。如果这不起作用,请尝试覆盖 -constrainFrameRect:toScreen: 以仅返回传入的矩形。
  • 谢谢你,肯,但我没有帮忙。我发现如果我在情节提要中为我的 NSWindow 激活“启动时可见”,它确实有效。如果我然后可编程命令窗口退出,那么下次运行初始脚本它又是错误的。

标签: cocoa


【解决方案1】:

几天后我开始工作了:

情节提要中的 NSWindow 被标记为“启动时启动”

在 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)];

【讨论】:

  • 这有可能更新到 swift 4+ 吗?我基本上在做同样的事情,但我不知道 obj-c 以便将其更新/转换为 swift 4+。
猜你喜欢
  • 2010-10-19
  • 2016-02-16
  • 2020-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多