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方法(或任何您想要的方法)