gpt4 book ai didi

cocoa - 带选项的窗口编号 : on Yosemite fails to return NSPanel windows of my application

转载 作者:行者123 更新时间:2023-12-03 16:40:42 24 4
gpt4 key购买 nike

我有一个基于文档的应用程序,有一个主文档窗口和几个显示相关信息的“卫星”NSPanel 窗口。它们不是 float 的,它们可以(并且确实)成为关键,并且似乎与主窗口位于同一层。

我尝试实现显示/隐藏操作,如下所示:如果面板不可见 - 显示它。如果它可见,但不是前面 - 将其设置为前面。如果它是可见的并且在前面 - 将其隐藏。

为此,我需要知道 NSPanel 是否是“最前面的”。遗憾的是没有 NSWindow API 可以实现这一点。我尝试使用 windowNumbersWithOptions 来比较面板的 z 顺序。

-(void) togglePanelVisibility:(PMXPanelController *)panelController {
NSPanel *panel = [panelController window];
if ([panel isVisible]) {
NSArray *windowNumbers = [NSWindow windowNumbersWithOptions:0];
if ([panel windowNumber] == [[windowNumbers firstObject] integerValue]) {
[panel orderOut:self];
}
else {
[panel makeKeyAndOrderFront:self];
}
} else
[panelController showWindow:self];
}

唉,我收到的数组只包含一个数字 - 用于我的主文档窗口。我可以在“窗口”菜单中看到我的面板,我可以单击它们将它们带到前面,我可以关闭它们并使用它们 - 但我无法通过 windowNumbersWithOptions 获取它们的号码:

有人有想法吗?

最佳答案

它没有在任何地方说明这一点,但从 NSWindowNumberListAllApplications 返回的少量窗口来看,windowNumbersWithOptions 只返回正常级别的窗口或应用一些一种不包括其他窗口的过滤。最好的选择是 orderedWindows NSApplication 实例的属性,但既然您提到了面板,请注意:

Only windows that are typically scriptable are included in the array. For example, panels are not included.

请记住,这两种方法都依赖于 Quartz API,并且可能使用 CGWindowListCopyWindowInfo – 在最坏的情况下,您可以转到较低的级别并使用它。

关于cocoa - 带选项的窗口编号 : on Yosemite fails to return NSPanel windows of my application,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30900230/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com