目标c -调整大小和重新定位窗口,以跨越所有监视器



大家好,我正在做一个小型的跨平台爱好/教育项目,该项目截取所有显示器的屏幕截图,并将所有显示器覆盖在一个宽窗口上。现在在Windows和GTK系统上,这不是问题。但是我在OSX上有问题:

    第一个主要问题是窗口没有覆盖到dock的非工作区域和顶部的菜单栏。
  1. 它不会调整大小以跨越多个显示器。

有什么程序方法来完成这一点吗?用户真的很喜欢截图时,它覆盖了所有的显示器,然后他们裁剪并点击上传到图像服务等。我只是想给他们在OSX上带来同样的体验。

谢谢

在OS X 10.9中,苹果引入了一项名为"显示有独立空格"的功能。请参阅系统偏好的任务控制面板。默认开启

打开时,没有窗口可以跨越多个监视器。即使它是通过编程设置的框架,它也只会出现在包含窗口大部分区域的屏幕上。窗口将被夹在那个屏幕的框架上。

所以,你必须为每个屏幕创建一个单独的窗口。

来自10.9 AppKit发行说明:

空格和多屏幕

在10.9中,我们添加了一个特性每个屏幕都有自己的一组空间,并且可以进行切换在一个屏幕上的空格之间,而不会干扰上的空格其他屏幕。在此模式下,全屏窗口使用一个屏幕,并且保留任何其他屏幕的内容不变。…

启用此功能时,窗口可能不会显示可见的span。一个窗口将被分配给包含大多数的显示它的几何形状被编程地定位在一个生成位置。一个窗口将被分配给包含鼠标的显示窗口由用户移动。窗户夹在窗户的边缘显示,是否有另一个相邻的显示

此外,由于菜单栏出现在所有屏幕上,苹果改变了窗口被限制在屏幕上的方式。此外,来自10.9 AppKit发布说明:

constrainframect:toScreen:现在为无边框窗口调用

之前到10.9,NSWindow方法-[NSWindow constraintframeect:toScreen:]仅在设置了NSTitledWindowMask的styleMask。在10.9中,对所有窗口都调用这个方法。的默认实现对非标题的约束更为有限窗口,如"约束NSWindows不与菜单栏

NSWindows被限制不与菜单栏相交

In 10.9, In支持新的多显示器架构,Windows现在都有了限制不与菜单栏在其包含空间上相交。这个限制已经适用于有标题的窗口,但它已经存在了已扩展到级别至少为的无边界窗口NSNormalWindowLevel但小于NSMainMenuWindowLevel。这种行为在-[NSWindow constraintFrameRect:toScreen:]中实现。你可能在NSWindow子类中重写该方法来调整或防止这种情况约束。

因此,您要么必须使用覆盖-constrainFrameRect:toScreen:NSWindow的自定义子类来返回不受约束的框架,或者您必须将窗口的level设置为NSMainMenuWindowLevel或更高。

最新更新