Win10 Mouse

Windows10 でマウスのクリックを検出します。

前田稔の超初心者のプログラム入門

プログラムの説明

  1. Windows10 では Mouse 以外にも Pen や Touch の Pointer Device に対応していて .NET ライブラリとは随分様子が違うようです。
    .NET では Mouse のイベントハンドラーは this.MouseDown += で設定していましたが、Pointer Device では this.PointerPressed += で設定します。
    Pointer Device 関係の API はバージョンが違うと動かないことがあるので注意して下さい。
    このプロジェクトは 2016/06/15 Windows10 & Visual Studio 2019 16.1.3 の環境で実行を確認しています。
  2. それでは具体的にマウスのクリックを検出するプロジェクトを作成しましょう。
    Visual Studio を起動して、空白のアプリ(ユニバーサル Windows)を作成して下さい。
    プロジェクトの作成は C# Store Application を参照して下さい。
  3. MainPage.xaml.cs の MainPage() 関数で Pointer Device のイベントハンドラーを設定します。
        public MainPage()
        {
            this.InitializeComponent();
            this.PointerPressed += onPointerPressed;
        }
    
  4. Pointer Device のイベントハンドラー onPointerPressed です。
    マウスの左右のボタンを判定して MessageDialog で知らせます。
        private void onPointerPressed(object sender, PointerRoutedEventArgs e)
        {
            Windows.UI.Popups.MessageDialog dlg;
            Windows.UI.Xaml.Input.Pointer ptr = e.Pointer;
            if (ptr.PointerDeviceType == Windows.Devices.Input.PointerDeviceType.Mouse)
            {
                Windows.UI.Input.PointerPoint point = e.GetCurrentPoint(this);
                if (point.Properties.IsRightButtonPressed)
                {
                    dlg = new Windows.UI.Popups.MessageDialog("Mouse Right Pressed");
                    dlg.ShowAsync();
                }
                if (point.Properties.IsLeftButtonPressed)
                {
                    dlg = new Windows.UI.Popups.MessageDialog("Mouse Left Pressed");
                    dlg.ShowAsync();
                }
            }
        }
    
  5. 次はマウスの座標を取得して表示してみましょう。
    point.Position.X がX座標で、point.Position.Y がY座標です。
        private void onPointerPressed(object sender, PointerRoutedEventArgs e)
        {
            Windows.UI.Popups.MessageDialog dlg;
            Windows.UI.Xaml.Input.Pointer ptr = e.Pointer;
            if (ptr.PointerDeviceType == Windows.Devices.Input.PointerDeviceType.Mouse)
            {
                Windows.UI.Input.PointerPoint point = e.GetCurrentPoint(this);
                string str1 = point.Position.X.ToString();
                string str2 = point.Position.Y.ToString();
                dlg = new Windows.UI.Popups.MessageDialog("Posion X:" + str1 + "  Posion Y:" + str2);
                dlg.ShowAsync();
            }
        }
    
  6. 確認はしていませんが、Pen や Touch の Pointer Device では次のようにコーディングするようです。
            Windows.UI.Input.PointerPoint point = e.GetCurrentPoint(this);
            string str1 = point.Properties.XTilt.ToString();
            string str2 = point.Properties.YTilt.ToString();
            dlg = new Windows.UI.Popups.MessageDialog("Tilt X:" + str1 + "  Tilt Y:" + str2);
            dlg.ShowAsync();
    

旧仕様のプログラム

  1. .NET では Mouse のイベントハンドラーは this.MouseDown += で設定していました。
    昔(Win32 API の時代)は良く使っていたのですが、残念ながら動かなくなりました。 (^_^;)
        public MyForm()
        {
            this.MouseDown += new MouseEventHandler(OnMyMouseDown);
        }
    
        private void OnMyMouseDown(object sender, MouseEventArgs e)
        {
            MessageBox.Show("Mouse がクリックされました");
        }
    
  2. WPF MouseClick で使われている Win32API の方法は WPF 以外では使えません。
        public MainWindow()
        {
            InitializeComponent();
            this.MouseDown += new MouseButtonEventHandler(OnMyMouseDown);
        }
    
  3. Border を貼り付けて Border 内のクリックを検出する場合です。
        public MainPage()
        {
            this.InitializeComponent();
            border.PointerPressed += new PointerEventHandler(onPointerPressed);
        }
    

超初心者のプログラム入門(C# Frame Work)