7

NSView をサブクラス化し、次を使用して NSTrackingArea を作成しました。

-(void)setUpTrackingArea
{
    if(trackingArea != nil)
    {
        [self removeTrackingArea:trackingArea];
    }

    int opts = (NSTrackingMouseEnteredAndExited | NSTrackingActiveAlways | NSTrackingEnabledDuringMouseDrag);
    trackingArea = [ [NSTrackingArea alloc] initWithRect:[self bounds] options:opts owner:self userInfo:nil];
    [self addTrackingArea:trackingArea];

    NSLog(@"update tracking area %@", trackingArea);

    NSPoint mouseLocation = [[self window] mouseLocationOutsideOfEventStream];
    mouseLocation = [self convertPoint: mouseLocation   fromView: nil];

    if (NSPointInRect(mouseLocation, [self bounds]))
    {
        [self mouseEntered: nil];
    }
    else
    {
        [self mouseExited: nil];
    }

}

私もオーバーライドしています:

- (void)mouseEntered:(NSEvent *)theEvent
- (void)mouseExited:(NSEvent *)theEvent

次に呼び出すハイライトプロパティを設定する

[self setNeedsDisplay:YES];

drawrect を呼び出して、メニューに期待されるようにメニュー ビューを強調表示します。

問題は、マウスが離れた後に一部のカスタム ビューが強調表示されたまま、マウス終了イベントが常に発生するようには見えないことです。

私が間違っていることは何ですか?

この問題を提示するデモ プロジェクトを作成しました。

https://github.com/antokne/APGCustomMenuItemViewを参照してください

タンツ。

4

1 に答える 1