マウスイベント(マウスをクリック、ダブルクリックなど)の処理を追加するには、イベント処理を行うオブジェクト(ピクチャボックスやボタンなど)を選択した状態でイベントのプロパティウィンドウを表示し、イベント処理の文字の部分をダブルクリックします。
すると、イベントハンドラが自動的に作成されます。
下記の例は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××イベントをお使い下さい。
また、イベントの発生順番は
- MouseDown
- Click
- MouseClick
- MouseUp
- MouseDown
- DoubleClick
- MouseDoubleClick
- MouseUp
となります。
コメント