MonoMac/カスタムコントロールでマウスボタンが押された座標を取得する

提供: MonoBook
< MonoMac
2016年3月31日 (木) 11:18時点における122.18.176.120 (トーク)による版 (ページの作成:「== 概要 == マウスのボタンが押されるとNSViewクラスのMouseDownメソッドやMouseUpメソッドが呼ばれる。 これらのメソッドに...」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

概要[編集 | ソースを編集]

マウスのボタンが押されるとNSViewクラスのMouseDownメソッドやMouseUpメソッドが呼ばれる。 これらのメソッド引数として渡されるtheEvent変数に含まれる座標はウインドウ領域の座標(ウインドウの角を原点とした座標)である。 常識的に考えてウインドウ領域の座標が欲しい場面などほとんどないわけで、これでは非常に扱いづらい。

実装[編集 | ソースを編集]

ウインドウ領域の座標をビュー領域の座標に変換してやるにはNSViewクラスのConvertPointFromViewメソッドを使用する。なんとも面倒くさい。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Drawing;
using MonoMac.Foundation;
using MonoMac.AppKit;

namespace ContentEditor
{
    public partial class EditorView : MonoMac.AppKit.NSView
    {
        // 〜〜〜省略〜〜〜

        public override void MouseDown(NSEvent theEvent)
        {
            // ウインドウ領域の座標をビュー領域の座標に変換する。
            // aViewはnull指定で自身になる
            var locationInView = this.ConvertPointFromView( aPoint:theEvent.LocationInWindow, aView:null );
            Console.WriteLine(locationInView);

            base.MouseUp(theEvent);
        }
    }
}

関連項目[編集 | ソースを編集]

参考文献[編集 | ソースを編集]