3

以下のようなコードでその領域をクリックできるように、NSStatusItem の画面上の場所を取得しようとしています。ユーザーがホットキーを押してメニューを表示できるように、これを行っています。

event = CGEventCreateMouseEvent(NULL, kCGEventLeftMouseDown, newLocation, kCGMouseButtonLeft);
CGEventPost(kCGHIDEventTap, event);
CFRelease(event);

場所を取得する方法を知っている人はいますか?, 私はアイデアを試して何日も探していて、いくつかのアイデアを見つけましたが、ヒョウ/ユキヒョウではうまくいかないようです.

NSStatusItem は、カスタム ビューではなく NSMenu を使用しています。

4

2 に答える 2

3

マウスイベントをシミュレートしてこれを行わないでください。これは完全に間違った方法です。

-popUpStatusItemMenu:のメソッドを使用してNSStatusItem、メニューを表示できます。を使用してホット キーからこのメソッドを呼び出して、応答可能CGEventTapなグローバル イベントをキャプチャできます。NSStatusItem

10.6では、直接使用する代わりに、 の+addGlobalMonitorForEventsMatchingMask:handler:メソッドを使用してグローバル イベントをキャプチャできます。NSEventCGEventTap

于 2009-11-10T10:43:25.240 に答える
0

大声で考えると、NSStatusItemの独自のカスタムビューを作成できます。次に、たとえばAppControllerから:

- (void)awakeFromNib {    
float width = 30.0;
float height = [[NSStatusBar systemStatusBar] thickness];
NSRect viewFrame = NSMakeRect(0, 0, width, height);
statusItem = [[[NSStatusBar systemStatusBar] statusItemWithLength:width] retain];
[statusItem setView:[[[MyCustomView alloc] initWithFrame:viewFrame controller:self] autorelease]];

また、ハイライトをシミュレートするには、カスタムビューにメッセージを送信します。次に、MyCustomViewを描画するとき:

// In MyCustomView.m
- (void)drawRect:(NSRect)rect {
if (clicked) {
    [[NSColor selectedMenuItemColor] set];
    NSRectFill(rect);
}

を使用するだけでなく-popUpStatusItemMenu:

于 2010-03-27T11:25:47.443 に答える