Cocoa 我可以更改NSScreen visibleframe吗?
我试图创建一个工具栏,它停靠在OSX菜单栏下方的屏幕顶部Cocoa 我可以更改NSScreen visibleframe吗?,cocoa,screen,macos,Cocoa,Screen,Macos,我试图创建一个工具栏,它停靠在OSX菜单栏下方的屏幕顶部 我不希望其他应用程序在最大化时能够与我的应用程序重叠。我可以使用NSScreen的visibleframe方法获得可视框架尺寸,但是我可以调整visibleframe以忽略应用程序的大小和位置吗 尝试将窗口级别设置为NSDockWindowLevel 这可能不起作用,这取决于系统是减去该级别上的所有窗口,还是仅减去码头的窗口,但值得一试。简单的答案是不,你不能。我认为改变屏幕的visibleRect的唯一方法是将代码注入AppKit,然后
我不希望其他应用程序在最大化时能够与我的应用程序重叠。我可以使用NSScreen的visibleframe方法获得可视框架尺寸,但是我可以调整visibleframe以忽略应用程序的大小和位置吗 尝试将窗口级别设置为
NSDockWindowLevel
这可能不起作用,这取决于系统是减去该级别上的所有窗口,还是仅减去码头的窗口,但值得一试。简单的答案是不,你不能。我认为改变屏幕的
visibleRect
的唯一方法是将代码注入AppKit,然后快速切换方法
即便如此,它也可能做不到你想做的事情,因为苹果可能不会用这种方法来确定windows的“安全区域”,而且几乎可以肯定的是,这种方法不适用于碳应用程序
您对窗口级别所做的任何操作都不会改变这一点
如果您检测到窗口的框架已更改,以至于它们与工具栏窗口重叠,则可以使用辅助功能框架重新定位窗口。不幸的是,我认为您可能需要为此使用轮询。您为您的窗口分配了什么窗口级别?我将我的窗口级别分配为:NSPopUpMenuWindowLevel。这使得我的窗口位于其他窗口之上,但当我最大化其他窗口时,它们位于我的窗口之下,我希望它们停在我的窗口底部,而不是位于我的应用程序之下。比如当窗口最大化时,dock是如何阻止窗口越过它的。这与NSPopUpMenuWindowLevel做了同样的事情。也许不可能为Mac电脑创建工具栏或任务栏来改变操作系统的工作区,我以前从未见过这样的工具栏或任务栏。至少我现在知道了,知道是成功的一半