MenuLet.h
MenuLet.m#import@interface MenuLet : NSObject {}+ (void) showMenuIcon;@end
使用方法:#import "MenuLet.h"@implementation MenuLet+(void) showMenuIcon {NSStatusItem *statusItem;NSMenu *theMenu;statusItem = [[[NSStatusBar systemStatusBar] statusItemWithLength: NSVariableStatusItemLength] retain];[statusItem setImage:[NSImage imageNamed:@"iSSHTray.tiff"]];[statusItem setHighlightMode:YES];[statusItem setTitle:@""];[statusItem setEnabled:YES];[statusItem setToolTip:@""];theMenu = [[NSMenu alloc] initWithTitle:@""];[theMenu addItemWithTitle:@"Show" action:@selector(unhide:) keyEquivalent:@"S"];[theMenu addItemWithTitle:@"Hide" action:@selector(hide:) keyEquivalent:@"H"];[theMenu addItemWithTitle:@"Quit" action:@selector(terminate:) keyEquivalent:@"Q"];[statusItem setMenu:theMenu];[theMenu release];}@end
在应用程序的Delegate(委托类)的实现中加入:
整个代码的原理很简单,就是创建一个NSStatusItem对象,设置图标,标题,工具提示,启用状态,加入一个NSMenu对象。最后,在应用程序的委托类中调用方法,显示菜单。-(void)applicationDidFinishLaunching:(NSNotification *)anotification {[MenuLet showMenuIcon]; //Show Tray Icon and Menu}
关于某文中提到的HIG说不要用系统托盘菜单。不过现在的HIG似乎已经修改了关于这部分的描述,没有鼓励,也没有要求开发人员不使用系统托盘(专业名词应该叫做Menubar Extras)。参看这里。
不过有时候一个简单的程序占用着Dock图标看着很闹心,还不如用一个MenuLet,更何况,现在的显示器都是宽屏的,不是嘛。 :P
附注:本文代码照抄了这里;理解部分参考了这里;苹果人机界面指导原则在这里。
没有评论:
发表评论