2011-08-25 226 views
0

我用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」,但事情並沒有我想象的那麼困難。

有什麼建議嗎?

回答

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