0

NSMenu と NSStatusItem を使用して、この方法でステータス バーにカスタム メニューを長時間表示しました。

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

画像アイコンをクリックすると正常に動作します。しかし、空港メニュー、電源メニュー、言語メニュー、日付/時刻メニューなど、ステータスバーにあるアップルのメニューは、マウスを動かすだけで簡単にトリガーできることに気付きました。マウスが上を歩くと、それらはすべて自動的にポップアップします。彼らはどうやってそれを手に入れたのですか?

「mouseEntered」イベントでNSViewの「add tracking rect」を確認しましたが、思ったほど難しくありません。

何かアドバイス?

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];

ここでは、ビューを statusitem に設定する例を示します。マウス イベントをサポートする場合、ビューは同じビューを拡張して NSTrackingArea を作成し、moveMoved、mouseEntered、および mouseExited メソッド (または必要なメソッド) を実装する必要があります。

于 2012-03-27T10:40:25.110 に答える