2012-12-03 31 views
1

我有一个QT应用程序,我在OSX上使用本机菜单。我有自定义绘制的菜单项,我通过将我自己的NSView派生类附加到我想特别绘制的NSMenuItems创建。这一切都很好;菜单项正确绘制并正确启动菜单功能。但是,在激活菜单功能后,菜单不会消失 - 它仍在跟踪鼠标移动。 (游标仍然会突出显示项目)我花了数天的时间寻找答案,在其他地方我还没有看到类似的问题。我的NSView类很简单;我已经覆盖了“矩形”类绘画,我mouseUp事件是在这里:NSMenu cancelTracking有时不会取消跟踪

-(void)mouseUp:(NSEvent *)theEvent 
{ 
    NSMenuItem* item = [self enclosingMenuItem]; 
    if (item != nil){ 
     NSMenu *menu = [item menu]; 
     if (menu != nil){ 
      [menu cancelTracking]; 
      [NSApp sendAction:[item action] to:[item target] from:item]; 
     } 
    } 
} 

我也使用“cancelTrackingWithoutAnimation”试过了,我已经打过电话父菜单栏cancelTracking。任何人都可以告诉我什么情况下“cancelTracking”可能会失败?我不确定接下来要尝试什么。谢谢。

回答

0

为时已晚,但我也面临着同样的问题,并通过使用碳API CancelMenuTracking(),

CancelMenuTracking(
    MenuRef inRootMenu, 
    Boolean inImmediate, 
    UInt32 inDismissalReason) 

用于_NSGetCarbonMenu得到NSMenu的menuref固定它。

menuRef = _NSGetCarbonMenu(myMenu); 

CancelMenuTracking(menuRef,YES,kHIMenuDismissedByCancelMenuTracking);对于10.5和CancelMenuTracking(menuRef,YES,0); 10.6及以上