pragma once Hard / Занятие 9
.docОбработка событий мыши
События мыши
Click |
Происходит при щелчке элемента управления. Может создаваться не только мышью, но и другими действиями, такими как нажатие клавиши ВВОД, когда фокус находится в элементе управления. |
MouseClick |
Происходит при щелчке элемента управления мышью. |
DoubleClick |
Происходит, когда элемент управления дважды щелкается. Может вызываться другими действиями пользователя, например нажатием сочетания клавиш. |
MouseDoubleClick |
Происходит, когда пользователь быстро дважды нажимает кнопку мыши, когда курсор находится на элементе управления. |
MouseDown |
Происходит при нажатии кнопки мыши, если указатель мыши находится на элементе управления. |
MouseUp |
Происходит при отпускании кнопки мыши, если указатель мыши находится на элементе управления. |
MouseEnter |
Происходит, когда указатель мыши оказывается на элементе управления. |
MouseHover |
Происходит, когда указатель мыши задерживается на элементе управления. |
MouseLeave |
Происходит, когда указатель мыши покидает элемент управления. |
MouseMove |
Происходит при перемещении указателя мыши по элементу управления. |
MouseWheel |
Происходит при движении колесика мыши, если элемент управления имеет фокус. |
Свойства аргумента e
Button |
Получает значение, показывающее, какая кнопка мыши была нажата. |
Clicks |
Получает число нажатий и отпусканий кнопки мыши. |
Delta |
Получает число со знаком, указывающее количество делений, на которое повернулось колесико мыши. Делением называется один зубец колесика мыши. |
Location |
Получает расположение указателя мыши на момент создания события. |
X |
Получает координату x указателя мыши на момент создания события. |
Y |
Получает координату y указателя мыши на момент создания события. |
Перечисление MouseButtons (возможные значения свойства Button)
Left |
Была нажата левая кнопка мыши. |
None |
Никакая кнопка мыши не была нажата. |
Right |
Была нажата правая кнопка мыши. |
Middle |
Была нажата средняя кнопка мыши. |
XButton1 |
Была нажата первая кнопка XButton. |
XButton2 |
Была нажата вторая кнопка XButton. |
События мыши происходят в следующем порядке:
-
MouseEnter
-
MouseMove
-
MouseHover / MouseDown / MouseWheel
-
MouseUp
-
MouseLeave
Пример 1
Создайте форму следующего вида: на ней расположено 8 элементов label. Цвет фона элементов label изменен на «белый», чтобы четко были видны границы элемента.
Обработчики событий:
private: System::Void Form1_MouseClick(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) {
switch ( e->Button ){
case System::Windows::Forms::MouseButtons::Left:
label1->Text = "Button: "+ L"Левая";
break;
case System::Windows::Forms::MouseButtons::Right:
label1->Text = "Button: "+ L"Правая";
break;
case System::Windows::Forms::MouseButtons::None:
label1->Text = "Button: "+ L"Не нажата";
break;
case System::Windows::Forms::MouseButtons::Middle :
label1->Text = "Button: "+ L"Средняя";
break;
}
//label1->Text= "Button: "+ Convert::ToString(e->Button);
label2->Text="Clicks: "+Convert::ToString(e->Clicks);
label3->Text="Delta: "+Convert::ToString(e->Delta);
label4->Text="Location: "+Convert::ToString(e->Location);
label5->Text="X: "+Convert::ToString(e->X);
label6->Text="Y: "+Convert::ToString(e->Y);
//положение мыши относительно левого верхнего угла монитора
label7->Text="MousePosition.X: "+Convert::ToString(this->MousePosition.X);
label8->Text="MousePosition.Y: "+Convert::ToString(this->MousePosition.Y);
}
private: System::Void Form1_MouseEnter(System::Object^ sender, System::EventArgs^ e) {
this->BackColor=Color::Aqua;
}
private: System::Void Form1_MouseLeave(System::Object^ sender, System::EventArgs^ e) {
this->BackColor=Color::Gray;
}
Обработка событий клавиатуры
События клавиатуры
KeyDown |
Возникает при нажатии клавиши на клавиатуре. Происходит один раз |
KeyPress |
Возникает при нажатии клавиши или клавиш, которое привело к вводу знака. Например, пользователь нажимает клавишу SHIFT и клавишу буквы "a" нижнего регистра, что приводит к вводу знака прописной буквы "A".. Может возникать несколько раз, когда пользователь удерживает нажатую клавишу |
KeyUp |
Возникает один раз после того, как пользователь отпускает клавишу |
Пример 2
Создайте форму следующего вида: на ней расположено 2 элемента label.
Обработчики событий:
private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) {
label1->Text=String::Empty;
label2->Text=String::Empty;
}
private: System::Void Form1_KeyPress(System::Object^ sender, System::Windows::Forms::KeyPressEventArgs^ e) {
label1->Text="Нажата клавиша: " + e->KeyChar;
}
private: System::Void Form1_KeyDown(System::Object^ sender, System::Windows::Forms::KeyEventArgs^ e) {
label2->Text=String::Empty;
//есди нажата Alt
if(e->Alt==true) label2->Text += "Alt: Yes\n";
else label2->Text += "Alt: No\n";
//есди нажата Shift
if(e->Shift==true) label2->Text += "Shift: Yes\n";
else label2->Text += "Shift: No\n";
//есди нажата Ctrl
if(e->Control==true) label2->Text += "Ctrl: Yes\n";
else label2->Text += "Ctrl: No\n";
label2->Text += "KeyCode: " + Convert::ToString(e->KeyCode) + "\n";
label2->Text += "KeyData: " + Convert::ToString(e->KeyData) + "\n";
label2->Text += "KeyValue: " + Convert::ToString(e->KeyValue) + "\n";
}
private: System::Void Form1_KeyUp(System::Object^ sender, System::Windows::Forms::KeyEventArgs^ e) {
label1->Text=String::Empty;
label2->Text=String::Empty;
}