如何让我的应用程序保持在全屏应用程序之上

时间:2011-09-28 09:34:17

标签: objective-c xcode cocoa osx-lion

我有一个必须始终保持在其他应用程序之上的应用程序。 我目前正在使用主窗口的setLevel属性使其保持在其他桌面应用程序之上。

我正在尝试修复我的应用,因此它也可以保持在Lion中的全屏应用程序之上。 关于如何做到这一点的任何想法?

应用程序委托如下所示:

#import "alwaysOnTopAppDelegate.h"

@implementation alwaysOnTopAppDelegate

@synthesize window;

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    [window setLevel:NSFloatingWindowLevel];
}

@end

3 个答案:

答案 0 :(得分:6)

找到答案:应用代表应如下所示:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    [window setLevel:kCGMainMenuWindowLevel-1];
    [window setCollectionBehavior:NSWindowCollectionBehaviorStationary|NSWindowCollectionBehaviorCanJoinAllSpaces|NSWindowCollectionBehaviorFullScreenAuxiliary];
}

答案 1 :(得分:3)

Yoink的工作方式很简单: 只需在应用程序的Info.plist中将“Application is Agent(UIElement)”设置为YES即可。这意味着它不会出现在码头等等,但对于辅助窗口来说这可能是好的(好吧,这对我来说!)。在这种情况下提供菜单栏项可能是有意义的,因此用户可以轻松地停止应用程序。

答案 2 :(得分:0)

以下是我的测试代码,它运行正常,希望可以帮助。

NSPanel *test_panel = [[NSPanel alloc] initWithContentRect:NSMakeRect(300, 300, 500, 500) styleMask:NSTitledWindowMask|NSClosableWindowMask backing:NSBackingStoreBuffered defer:YES];
[test_panel setReleasedWhenClosed:YES];
[test_panel setHidesOnDeactivate:NO];
[test_panel setFloatingPanel:YES];
[test_panel setStyleMask:NSBorderlessWindowMask | NSNonactivatingPanelMask];
[test_panel setLevel:kCGMainMenuWindowLevel-1];
[test_panel  setCollectionBehavior:NSWindowCollectionBehaviorCanJoinAllSpaces|NSWindowCollectionBehaviorFullScreenAuxiliary];
[test_panel setCanBeVisibleOnAllSpaces:YES];
[test_panel center];
[test_panel orderFront:nil];