差分

ナビゲーションに移動 検索に移動

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

3,093 バイト追加, 2017年6月19日 (月) 01:42
ページの作成:「NSViewには「MouseEntered」「MouseMoved」「MouseExited」というズバリなイベントがある。 しかしこれらのイベントは初期状態では発動...」
NSViewには「MouseEntered」「MouseMoved」「MouseExited」というズバリなイベントがある。
しかしこれらのイベントは初期状態では発動しないようになっている。
<source lang="csharp">
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");
}
}
</source>

これらのイベントを発動するには事前に「どの範囲で取るか」という指定をNSViewのAddTrackingAreaメソッドで指定する必要がある。
<source lang="csharp">
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);
}
</source>

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

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

; 取得したいイベントの種類
{| class="wikitable"
|-
| MouseEnteredAndExited || 1uL || EnteredとExitedイベントを発生させる
|-
| MouseMoved || 2uL || Movedイベントを発生させる
|-
| CursorUpdate || 4uL || カーソル変化も発生させる
|}

; 取得する条件1
{| class="wikitable"
|-
| ActiveWhenFirstResponder || 16uL || ビューにフォーカスのある時のみ取得する
|-
| ActiveInKeyWindow || 32uL || ウインドウがアクティブな時のみ取得する
|-
| ActiveInActiveApp || 64uL || アプリがアクティブな時のみ取得する(1アプリ複数ウインドウの場合は非アクティブでも取得)
|-
| ActiveAlways || 128uL || 常に取得する
|}

; 取得する条件2
{| class="wikitable"
|-
| AssumeInside || 256uL || 内側にいる時すべて取得する
|-
| InVisibleRect || 512uL || 見えている範囲内のみ取得する
|-
| EnabledDuringMouseDrag || 1024uL || マウスのドラッグ中のみ取得する
|}

== 関連項目 ==
* [[Xamarin.Mac/マウスの中ボタン(ホイール)のクリックを取得する]]
* [[Xamarin.Mac/ウインドウ座標をビュー座標に変換する]]

== 参考文献 ==
{{reflist}}

{{stub}}

[[category: Xamarin.Mac]]
匿名利用者

案内メニュー