Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 我可以更改NSScreen visibleframe吗?_Cocoa_Screen_Macos - Fatal编程技术网

Cocoa 我可以更改NSScreen visibleframe吗?

Cocoa 我可以更改NSScreen visibleframe吗?,cocoa,screen,macos,Cocoa,Screen,Macos,我试图创建一个工具栏,它停靠在OSX菜单栏下方的屏幕顶部 我不希望其他应用程序在最大化时能够与我的应用程序重叠。我可以使用NSScreen的visibleframe方法获得可视框架尺寸,但是我可以调整visibleframe以忽略应用程序的大小和位置吗 尝试将窗口级别设置为NSDockWindowLevel 这可能不起作用,这取决于系统是减去该级别上的所有窗口,还是仅减去码头的窗口,但值得一试。简单的答案是不,你不能。我认为改变屏幕的visibleRect的唯一方法是将代码注入AppKit,然后

我试图创建一个工具栏,它停靠在OSX菜单栏下方的屏幕顶部


我不希望其他应用程序在最大化时能够与我的应用程序重叠。我可以使用NSScreen的visibleframe方法获得可视框架尺寸,但是我可以调整visibleframe以忽略应用程序的大小和位置吗

尝试将窗口级别设置为
NSDockWindowLevel


这可能不起作用,这取决于系统是减去该级别上的所有窗口,还是仅减去码头的窗口,但值得一试。

简单的答案是不,你不能。我认为改变屏幕的
visibleRect
的唯一方法是将代码注入AppKit,然后快速切换方法

即便如此,它也可能做不到你想做的事情,因为苹果可能不会用这种方法来确定windows的“安全区域”,而且几乎可以肯定的是,这种方法不适用于碳应用程序

您对窗口级别所做的任何操作都不会改变这一点


如果您检测到窗口的框架已更改,以至于它们与工具栏窗口重叠,则可以使用辅助功能框架重新定位窗口。不幸的是,我认为您可能需要为此使用轮询。

您为您的窗口分配了什么窗口级别?我将我的窗口级别分配为:NSPopUpMenuWindowLevel。这使得我的窗口位于其他窗口之上,但当我最大化其他窗口时,它们位于我的窗口之下,我希望它们停在我的窗口底部,而不是位于我的应用程序之下。比如当窗口最大化时,dock是如何阻止窗口越过它的。这与NSPopUpMenuWindowLevel做了同样的事情。也许不可能为Mac电脑创建工具栏或任务栏来改变操作系统的工作区,我以前从未见过这样的工具栏或任务栏。至少我现在知道了,知道是成功的一半