3

画面上のステータスバーアイコンの位置を知りたい

-(void)awakeFromNib{
    statusItem = [[[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength] retain];
    NSBundle *bundle = [NSBundle mainBundle];
    statusImage = [[NSImage alloc] initWithContentsOfFile:[bundle pathForResource:@"r" ofType:@"png"]];
    statusHighlightImage = [[NSImage alloc] initWithContentsOfFile:[bundle pathForResource:@"rh" ofType:@"png"]]; 
    [statusItem setImage:statusImage];
    [statusItem setAlternateImage:statusHighlightImage];
    [statusItem setTitle:@"APP"];
    [statusItem setToolTip:@"You do not need this..."];
    [statusItem setHighlightMode:YES];

    NSRect rect = [[[statusItem view] window ] frame];

    NSLog(@"%f",rect.origin.y);

}

そうするために、そして到達しませんでした

NSRect rect = [[[statusItem view] window ] frame];

NSLog(@"%f",rect.origin.y);
4

1 に答える 1

4

ステータス アイテムのカスタム ビューを設定していないため、呼び出すviewと nil が返されます。

場所を知りたい理由は、ステータス項目をクリックするときだと思います。

ステータス アイテムにアクションを実装するとしたら、次のようになります。

- (IBAction)someAction:(id)sender
{
    NSWindow *window = [[[NSApplication sharedApplication] currentEvent] window];
    NSRect rect = [window frame];

    NSLog(@"%f",rect.origin.y);
}

次に、ステータス アイテムのアクションを次のように設定します。

[statusItem setAction:@selector(someAction:)];

ステータス項目をクリックすると、ログに次のようなものが表示されます。

2012-04-17 20:40:24.344 test[337:403] 1578.000000

この情報を使用して、たとえば、ウィンドウ (Matt Gemmell の MAAttachedWindow など) をステータス項目に相対的に配置できます。

于 2012-04-18T03:45:56.567 に答える