Objective c NSBorderlessSwindowMask窗口如果不是最前面的窗口,则不会显示NSPanel

Objective c NSBorderlessSwindowMask窗口如果不是最前面的窗口,则不会显示NSPanel,objective-c,cocoa,Objective C,Cocoa,我有一个设置了NSBorderlessWindowMask和kCGDesktopWindowLevel的窗口。当一个NSPanel应该出现在Dock图标菜单或状态栏项目菜单的选择中时,如果应用程序不是最前面的窗口,NSPanel将不会显示 因此,这个程序目前只有一个状态菜单项(想想QuickSilver是如何实现的),当我从菜单中选择“首选项”时,它会设置为使用MakeKeyandDerfront显示“首选项”面板,但是,除非您刚刚启动应用程序,并且没有执行任何其他操作,否则当您选择“首选项”时

我有一个设置了NSBorderlessWindowMask和kCGDesktopWindowLevel的窗口。当一个NSPanel应该出现在Dock图标菜单或状态栏项目菜单的选择中时,如果应用程序不是最前面的窗口,NSPanel将不会显示

因此,这个程序目前只有一个状态菜单项(想想QuickSilver是如何实现的),当我从菜单中选择“首选项”时,它会设置为使用MakeKeyandDerfront显示“首选项”面板,但是,除非您刚刚启动应用程序,并且没有执行任何其他操作,否则当您选择“首选项”时,不会发生任何事情

我发现,当我为Sparkle的“检查更新”选择菜单项时,会出现“检查更新”面板,然后会出现我告诉打开的首选项面板

因此,MakeKeyandDerfront似乎并没有真正把它带到前台

有人知道如何解决这个问题吗? 除了makekey和derfront之外,我应该叫什么名字,或者是和它一起叫什么名字


“提前感谢”

默认情况下,面板设计为以这种方式工作。它们被设计为应用程序的辅助窗口,并在应用程序停用时始终消失。您可能还会遇到面板成为关键的问题。。。但要解决面板消失的问题,请向面板发送以下消息:

[panelObject setHidesOnDeactivate:NO];

您可能应该在这里使用实际的NSWindow对象,而不是NSPanel对象,但由于我不太了解应用程序的工作原理,因此您必须亲自研究一下。有关面板和窗口之间差异的详细信息,请查看此处的文档:

是否有方法将其保持为“隐藏启用停用”,但当他们选择菜单项时,它会将应用程序带到前面,以便他们能够正确/正常工作?使用常规窗口,并让状态菜单/停靠菜单项的操作在窗口中排序。当你做完后,把它点出来。如果您想让它在用户单击其他位置时消失,请将ApplicationIDResignactive添加到您的应用程序代理中,并在那里订购。kdbdallas:Try[NSApp activateIgnoringOtherApps:NO]。如果这不起作用,请尝试“是”。如果不起作用,请尝试使用带有{0,kCurrentProcess}和kSetFrontProcessFrontWindowOnly的SetFrontProcessWithOptions。