创建一个Cocoa Application工程,如下实现AppDelegate。
AppDelegate.h 文件
#import <Cocoa/Cocoa.h>
@interface AppDelegate : NSObject <NSApplicationDelegate> {
NSStatusItem *statusItem;
}
@property (assign) IBOutlet NSWindow *window;
- (IBAction)quit:(id)sender;
- (IBAction)test:(id)sender;
@end
AppDelegate.m文件
#import "AppDelegate.h"
@implementation AppDelegate
@synthesize window;
- (void)dealloc
{
[super dealloc];
}
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
[self initStatusMenu];
}
- (void)initStatusMenu {
NSStatusBar *bar = [NSStatusBar systemStatusBar];
statusItem = [[bar statusItemWithLength:NSVariableStatusItemLength] retain];
[statusItem setTitle:@"StatusBar"];
[statusItem setHighlightMode:YES];
[statusItem sendActionOn:NSMouseEntered];
NSMenu *menu = [[NSMenu alloc] initWithTitle:@""];
[menu setAutoenablesItems:NO];
NSMenuItem *testMenuItem = [[NSMenuItem alloc] initWithTitle:@"Test" action:@selector(test:) keyEquivalent:@""];
[menu addItem:testMenuItem];
NSMenuItem *quitMenuItem = [[NSMenuItem alloc] initWithTitle:@"Quit" action:@selector(quit:) keyEquivalent:@""];
[menu addItem:quitMenuItem];
[statusItem setMenu:menu];
[menu release];
[testMenuItem release];
[quitMenuItem release];
}
- (IBAction)quit:(id)sender {
[NSApp terminate:self];
}
- (IBAction)test:(id)sender {
NSLog(@"test");
}
@end
需要注意的是要在工程的plist文件中加一个新的属性: Application is agent(UIElement),将值设为YES。 这样在启动程序的时候,Dock上就不会显示App的图标。
你还可以通过setImage: 和 SetAlternateImage: 来设置StatusBar的图标。
最后,编译运行,会在顶部的状态栏看到你的Status Bar。