0

我使用 NSMenu 和 NSStatusItem 以这种方式在状态栏上显示自定义菜单很长时间:

statusItem = [[[NSStatusBar systemStatusBar] statusItemWithLength:18] retain]; [statusItem setImage:[NSImage imageNamed:@"myIcon"]]; [statusItem setMenu:myMenu]; [statusItem setHighlightMode:NO]; ...

通过开始单击其图像图标,它可以正常工作。但我注意到,位于状态栏上的苹果菜单可以通过鼠标移动简单地触发,如机场菜单、电源菜单、语言菜单和日期/时间菜单。当您鼠标走过时,它们都会自动弹出。他们是怎么得到的?

我已经用“mouseEntered”事件检查了 NSView 的“添加跟踪矩形”,但事情并没有我想的那么困难。

有什么建议吗?

4

1 回答 1

1

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

于 2012-03-27T10:40:25.110 回答