NSMenu的鼠标悬停事件
问题描述:
我用NSMenu和NSStatusItem显示在状态栏自定义菜单很长一段时间是这样的:NSMenu的鼠标悬停事件
statusItem = [[[NSStatusBar systemStatusBar] statusItemWithLength:18] retain];
[statusItem setImage:[NSImage imageNamed:@"myIcon"]];
[statusItem setMenu:myMenu];
[statusItem setHighlightMode:NO];
...
它正常工作,由开始点击它的图像图标。 但我注意到,位于状态栏上的苹果菜单可以通过鼠标移动简单地触发,如机场菜单,电源菜单,语言菜单和日期/时间菜单。 鼠标移过时,它们都会自动弹出。 他们是如何得到它的?
我已经使用“mouseEntered”事件检查了NSView的“add tracking rect”,但事情并没有我想象的那么困难。
有什么建议吗?
答
我觉得statusItem是不支持的鼠标事件,但你可以设置一个视图的statusItem并覆盖鼠标甚至法,支持鼠标事件,就像这样:
statusItem = [[[NSStatusBar systemStatusBar] statusItemWithLength:NSSquareStatusItemLength] retain];
NSButton *nb = [[NSButton alloc] init];
[nb setImage:image];
[nb setAction:@selector(statusItemClick:)];
[_statusItem setView:nb];
这里只是一个例如,如果要支持鼠标事件,则您的视图必须扩展相同的视图并创建NSTrackingArea,并实现moveMoved,mouseEntered和mouseExited方法(或任何您想要的方法)