我有一个使用NSBorderlessWindowMask设置的窗口,还有kCGDesktopWindowLevel。当选择Dock图标菜单或状态栏项目菜单时,应该显示NSPanel,如果应用程序不是最前面的窗口,则不会显示NSPanel。
所以这个程序目前只有状态菜单项(想想如何实现QuickSilver),当我从菜单中选择“首选项”时,它设置为使用Makekeyandorderfront显示“首选项”面板,但是除非你刚刚启动了应用程序并且没有做任何其他事情,当你选择首选项时没有任何事情发生。
我发现当我为Sparkle的Check for Updates选择我的菜单项时,会出现检查更新面板,然后会出现我打开的首选项面板。
所以似乎makekeyandorderfront并没有真正把它带到前面,也许。
有谁知道如何解决这个问题? 我应该在makekeyandorderfront之外调用一些东西,还是与它结合使用?
提前致谢
答案 0 :(得分:2)
默认情况下,面板设计为以这种方式工作。它们被设计为应用程序的辅助窗口,并在应用程序停用时始终消失。您可能还会遇到面板问题变成关键问题......但为了解决您正在消失的面板问题,请将此消息发送给您的面板:
[panelObject setHidesOnDeactivate:NO];
你应该在这里使用实际的NSWindow对象而不是NSPanel对象,但由于我不太了解你的应用程序是如何工作的,所以你必须自己调查一下。有关面板和窗口之间差异的更多信息,请查看此处的文档:Window Programming Guide