2

orderOut と orderFront を使用して、ボーダレス ウィンドウを表示および非表示にするアプリケーションがあります。表示されている場合は、マウスが上に移動したときにキーウィンドウになるようにします。これまでのところ、私はこれを行ってきました:

  • awakeFromNib では、ファーストレスポンダーを自分自身に設定しました。
  • ウィンドウのコンストラクターで、マウスイベントを受け入れるように設定しました。
  • mouseMoved メソッドでは、makeKeyAndOrderToFront を使用します。

私の問題は、マウスをウィンドウ上に初めて移動したときにのみ機能することです。その後、mouseOver イベントを受け取りません。firstResponder をチェックしてみましたが、私が知る限り、ウィンドウから変更されることはありません。

これを機能させるために私ができることはありますか?

4

2 に答える 2

3

イベントを受信したい場合は、トラッキング エリアを追加する必要がありmouseMovedます (Cocoa にはmouseOverイベントのようなものがないため、これが意味することだと思います)。

私は Shroud という小さなアプリを書きました。このアプリは、マウスを上に移動すると、メニュー バーを覆うボーダーレス ウィンドウを非表示にします。コードは単純なので、例として役立つかもしれません。

于 2010-05-17T01:16:28.457 に答える
2

@NicholasRiley答えの助けを借りて書かれた例を次に示します。

NSTrackingArea *area = [[NSTrackingArea alloc] initWithRect:[self.view frame] options:NSTrackingMouseEnteredAndExited | NSTrackingInVisibleRect | NSTrackingActiveAlways owner:self userInfo:nil];
[self.view addTrackingArea:area];

-(void)mouseEntered:(NSEvent *)theEvent {
    NSLog(@"mouseEntered");
}

-(void)mouseExited:(NSEvent *)theEvent {
    NSLog(@"mouseExited");
}
于 2016-05-25T11:51:41.077 に答える