NSMenu没有开始跟踪

时间:2010-05-16 11:04:48

标签: cocoa macos contextmenu tracking nsmenu

我有一个小可可应用程序,通常在后台运行(作为代理)。有时候我希望能够弹出一个上下文菜单(此时没有窗口或s.th.可见)。

由于我只针对Snow Leopard,我试过这个:

if (windows) {
       NSMenu *theMenu = [[[NSMenu alloc] initWithTitle:@"test"] autorelease];
       [theMenu setShowsStateColumn:NO];
       [theMenu setAutoenablesItems:NO];

           for (id item in windows) {

               NSString *labelText = @"some text";

               NSMenuItem *theMenuItem = [[[NSMenuItem alloc] initWithTitle:labelText
                                             action:@selector(menuItemSelected:)
                                               keyEquivalent:@""] autorelease]; 

               [theMenuItem setTarget:self];
               [theMenuItem setRepresentedObject:item];
               [theMenuItem setEnabled:YES];
               [theMenuItem setImage:icon];
               [theMenu addItem:theMenuItem];
           }

       [theMenu popUpMenuPositioningItem:nil atLocation:[NSEvent mouseLocation] inView:nil];

 }

菜单弹出完美,但如果我用鼠标光标悬停项目,则不会突出显示,我也无法点击它们。

menuItemSelected:方法看起来像这样:

-(IBAction)menuItemSelected:(id)sender {

}

知道我做错了吗?

1 个答案:

答案 0 :(得分:0)

我怀疑窗口系统不会将您的应用程序视为活动状态,因此不会将鼠标事件发送到您创建的菜单。

作为实验,尝试在弹出菜单之前创建一个虚拟窗口。我创建了一个NSPanel,可能是样式NSNonActivatingPanelMaskmakeKeyAndOrderFront:您的窗口/面板,然后弹出菜单,看看会发生什么。

如果这样可行,我会坚持使用这种方法并隐藏窗口。