Xamarin.MacのNSViewでMouseMovedイベントなどを発生させる

提供: MonoBook
2017年6月19日 (月) 01:42時点における103.22.200.204 (トーク)による版 (ページの作成:「NSViewには「MouseEntered」「MouseMoved」「MouseExited」というズバリなイベントがある。 しかしこれらのイベントは初期状態では発動...」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

NSViewには「MouseEntered」「MouseMoved」「MouseExited」というズバリなイベントがある。 しかしこれらのイベントは初期状態では発動しないようになっている。

    public partial class MyView : AppKit.NSView
    {
        public override void MouseEntered(NSEvent theEvent)
        {
            base.MouseEntered(theEvent);
            Console.WriteLine("MouseEntered");
        }

        public override void MouseMoved(NSEvent theEvent)
        {
            base.MouseMoved(theEvent);
            Console.WriteLine("MouseMoved");
        }

        public override void MouseExited(NSEvent theEvent)
        {
            base.MouseExited(theEvent);
            Console.WriteLine("MouseExited");
        }
    }

これらのイベントを発動するには事前に「どの範囲で取るか」という指定をNSViewのAddTrackingAreaメソッドで指定する必要がある。

        void Initialize()
        {
            var trackingArea = new NSTrackingArea(
                 rect: this.Bounds,
                 options: NSTrackingAreaOptions.ActiveAlways |
                          NSTrackingAreaOptions.InVisibleRect |
                          NSTrackingAreaOptions.MouseEnteredAndExited |
                          NSTrackingAreaOptions.MouseMoved,
                 owner: this,
                 userInfo: null);
            
            this.AddTrackingArea(trackingArea);
        }

範囲指定やオーナー指定はみたままなので特に問題ないと思う。

オプション(NSTrackingAreaOptions)は以下のような列挙体になっており、大きくわけて「取得したいイベントの種類」と「取得する条件」の3種類を組み合わせて使用する。

取得したいイベントの種類
MouseEnteredAndExited 1uL EnteredとExitedイベントを発生させる
MouseMoved 2uL Movedイベントを発生させる
CursorUpdate 4uL カーソル変化も発生させる
取得する条件1
ActiveWhenFirstResponder 16uL ビューにフォーカスのある時のみ取得する
ActiveInKeyWindow 32uL ウインドウがアクティブな時のみ取得する
ActiveInActiveApp 64uL アプリがアクティブな時のみ取得する(1アプリ複数ウインドウの場合は非アクティブでも取得)
ActiveAlways 128uL 常に取得する
取得する条件2
AssumeInside 256uL 内側にいる時すべて取得する
InVisibleRect 512uL 見えている範囲内のみ取得する
EnabledDuringMouseDrag 1024uL マウスのドラッグ中のみ取得する

関連項目

参考文献