C++/CLI

【C++/CLI】マウスイベント処理

マウスイベント(マウスをクリック、ダブルクリックなど)の処理を追加するには、イベント処理を行うオブジェクト(ピクチャボックスやボタンなど)を選択した状態でイベントのプロパティウィンドウを表示し、イベント処理の文字の部分をダブルクリックします。

 

マウスイベント処理

 

すると、イベントハンドラが自動的に作成されます。
下記の例はMouseClickを追加した場合

 

this->pictureBox1->MouseClick += gcnew System::Windows::Forms::MouseEventHandler(this, &Form1::pictureBox1_MouseClick);

:
:

private: System::Void pictureBox1_MouseClick(System::Object^  sender, System::Windows::Forms::MouseEventArgs^  e) {

        //この位置にイベント処理を追加する。

}

 

このイベントハンドラ内にイベント処理を追加していきます。

 

ここで注意しないといけないのが、pictureBox1_MouseClickという名前になっていますが、必ずしもpicutureBox1からのイベントとは限りません。
どのオブジェクトかは、最初の引数の System::Object^ sender を参照します。
sender のプロパティはそのまま参照できないので、下記のようにキャストします。

 

PictureBox^ pic = static_cast<PictureBox^>(sender);

 

また、マウスのどのボタンがクリックされ、どの位置でクリックされたか?などは2番目の引数の
System::Windows::Forms::MouseEventArgs^ e を参照します。

 

ボタンの判別例は以下の通りです。

 

if (e->Button == System::Windows::Forms::MouseButtons::Left){
      //左ボタンクリック
      MessageBox::Show("左ボタンがクリックされました。");
}else if (e->Button == System::Windows::Forms::MouseButtons::Right){
      //右ボタンクリック
      MessageBox::Show("右ボタンがクリックされました。");
}else if (e->Button == System::Windows::Forms::MouseButtons::Middle){
      //中ボタンクリック
      MessageBox::Show("中ボタンがクリックされました。");
}

 

クリックされた位置のX座標は e->X、Y座標は e->Y で取得できます。

 

また、マウスをクリックした時にShiftキー、Ctrlキー、Altキー、が押されているかどうかを判別するにはControl::ModifierKeysプロパティを参照すれば良いのですが、厳密にはマウスがクリックされたときのキーを取得するのはなく、Control::ModifierKeysプロパティが呼ばれた時のキーを取得するので、ご注意下さい。

 

//Shift,Ctrl,Altキーが押されているか?
Keys key = Control::ModifierKeys;

if ((key & Keys::Control) == Keys::Control){
      //Controlボタンクリック
      MessageBox::Show("Controlボタンがクリックされました。");
}else if ((key & Keys::Shift) == Keys::Shift){
      //Shiftボタンクリック
      MessageBox::Show("Shiftボタンがクリックされました。");
}else if ((key & Keys::Alt) == Keys::Alt){
      //Altボタンクリック
      MessageBox::Show("Altボタンがクリックされました。");
}

マウスイベントには以下のようなものがあります。

 

イベント 意味
Click クリックされたとき
DoubleClick ダブルクリックされたとき
MouseCaptureChanged マウスのキャプチャがなくなるとき(意味不明???)
MouseClick マウスでクリックされたとき
MouseDoubleClick マウスでダブルクリックされたとき
MouseDown マウスボタンが押されたとき
MouseEnter マウスポインタがコントロールの外側から内側に入ったとき
MouseHover マウスポインタがコントロール上に留まっているとき
MouseLeave マウスポインタがコントロールの内側から外側に出たとき
MouseMove マウスポインタがコントロール上を移動したとき
MouseUp マウスボタンが離されたとき
MouseWheel コントロールにフォーカスがあり、マウスホイールが動いたとき

 

ClickイベントとMouseClickイベント、DoubleClickイベントとMouseDoubleClickイベントとは、ほぼ同じですが、2番目の引数が EventArgs^  e か MouseEventArgs^  e の違いがあります。
マウスの情報をより詳しく取得したい場合は Mouse××イベントをお使い下さい。

また、イベントの発生順番は

 

  1. MouseDown
  2. Click
  3. MouseClick
  4. MouseUp
  5. MouseDown
  6. DoubleClick
  7. MouseDoubleClick
  8. MouseUp

 

となります。

 

 

コメント

タイトルとURLをコピーしました