Mouse Click

マウスがクリックされた座標を印字します。

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

プログラムの説明

  1. Windows10 では Mouse 以外にも Pen や Touch の Pointer Device に対応していて .NET ライブラリとは随分様子が違うようです。
    Mouse のイベントハンドラーは MouseDown += で設定していましたが、Pointer Device では PointerPressed += で設定します。
    Pointer Device 関係の API はバージョンが違うと動かないことがあるので注意して下さい。
    このプロジェクトは 2016/02/22 Windows10 & Visual Studio Community 2015 の環境で作成しています。
        MouseDown += gcnew MouseButtonEventHandler(this, &FormClass::MyHandler);
    
        PointerPressed += ref new PointerEventHandler(this, &MainPage::OnPointerPressed);
    
  2. Visual Studio で UWP(Universal Windows Platform) のプロジェクトを作成します。
    プロジェクトの作成は XAML で図形を描画 を参照して下さい。
  3. MainPage.xaml.h で、マウスのクリックを検出する OnPointerPressed() 関数を宣言します。
        public:
            void OnPointerPressed(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e);
    
  4. MainPage.xaml.cpp の MainPage() 関数で Pointer Device のイベントハンドラーを設定します。
    MainPage::MainPage()
    {   InitializeComponent();
        PointerPressed += ref new PointerEventHandler(this, &MainPage::OnPointerPressed);
    }
    
  5. Pointer Device のイベントハンドラー OnPointerPressed です。
    マウスの左右のボタンを判定して OutputDebugString で印字しています。
    void App1::MainPage::OnPointerPressed(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e)
    {
        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)
            {   OutputDebugString(L"Mouse Right Pressed\n");  }
            if (point->Properties->IsLeftButtonPressed)
            {   OutputDebugString(L"Mouse Left Pressed\n");  }
        }
    }
    
  6. 次はマウスの座標を取得して印字してみましょう。
    point->Position がマウスの座標です。
        if (ptr->PointerDeviceType == Windows::Devices::Input::PointerDeviceType::Mouse)
        {   Windows::UI::Input::PointerPoint^ point = e->GetCurrentPoint(this);
            wchar_t str[80];
            Point pos = point->Position;
            swprintf(str, 80, L"Posion X:%f  Posion Y:%f\n\n", pos.X, pos.Y);
            OutputDebugString(str);
        }
    
  7. Visual Studio Professional 2019 16.1.1 で、このプロジェクトの実行を確認しました。
    メニューから「プロジェクト/ソリューションの再ターゲット」を実行して下さい。
    再ターゲット後に、右三角矢印(または F5 キー)で実行します。
    C# でも同様のプロジェクト Win10 Mouse を作成しています。
    C# WPF のプロジェクトは WPF MouseClick を参照して下さい。

超初心者のプログラム入門(C/C++)