Описание слайда: Работа с мышью и клавиатурой

Содержание

Слайд 2

09/02/2023 Содержание Работа с мышью Работа с клавиатурой

09/02/2023

Содержание

Работа с мышью
Работа с клавиатурой

Слайд 3

09/02/2023 Мышь Манипулятор с одной, двумя или тремя кнопками Перемещение отображается

09/02/2023

Мышь

Манипулятор с одной, двумя или тремя кнопками
Перемещение отображается на дисплее в

виде небольшого изображения – курсора
Курсор имеет специальный пиксел, координаты которого принимаются за координаты мыши
Слайд 4

09/02/2023 Получение характеристик мыши Опрос свойств объекта класса SystemInformation

09/02/2023

Получение характеристик мыши

Опрос свойств объекта класса SystemInformation

Слайд 5

09/02/2023 Сообщения мыши Оконная процедура получает сообщения при проходе мыши над

09/02/2023

Сообщения мыши

Оконная процедура получает сообщения при проходе мыши над окном или

нажатии клавиш мыши внутри области окна
Сообщения проходят ко всем окнам, даже если окно не имеет фокуса
Фокус – это свойство активного в данный момент окна
Слайд 6

09/02/2023 Основные сообщения

09/02/2023

Основные сообщения

Слайд 7

09/02/2023 Дополнительные сообщения

09/02/2023

Дополнительные сообщения

Слайд 8

09/02/2023 Параметры сообщений мыши MouseEventArgs

09/02/2023

Параметры сообщений мыши MouseEventArgs

Слайд 9

09/02/2023 Последовательность сообщений от мыши Одинарный щелчок MouseDown->Click->MouseClick->MouseUp Двойной щелчок MouseDown->Click->MouseClick->

09/02/2023

Последовательность сообщений от мыши

Одинарный щелчок
MouseDown->Click->MouseClick->MouseUp
Двойной щелчок
MouseDown->Click->MouseClick->
MouseUp-> MouseDown->
DoubleClick-> MouseDoubleClick->
MouseUp event.

Слайд 10

09/02/2023 Пример обработчика сообщений мыши private void Control1_MouseClick(Object sender, MouseEventArgs e)

09/02/2023

Пример обработчика сообщений мыши

private void Control1_MouseClick(Object sender, MouseEventArgs e) {
System.Text.StringBuilder

messageBoxCS = new System.Text.StringBuilder();
messageBoxCS.AppendFormat("{0} = {1}", "Button", e.Button );
messageBoxCS.AppendLine();
messageBoxCS.AppendFormat("{0} = {1}", "Clicks", e.Clicks );
messageBoxCS.AppendLine();
messageBoxCS.AppendFormat("{0} = {1}", "X", e.X );
messageBoxCS.AppendLine();
messageBoxCS.AppendFormat("{0} = {1}", "Y", e.Y );
messageBoxCS.AppendLine();
messageBoxCS.AppendFormat("{0} = {1}", "Delta", e.Delta );
messageBoxCS.AppendLine();
messageBoxCS.AppendFormat("{0} = {1}", "Location", e.Location );
messageBoxCS.AppendLine();
MessageBox.Show(messageBoxCS.ToString(), "MouseClick Event" );
}
Слайд 11

09/02/2023 Drag-n-Drop

09/02/2023

Drag-n-Drop

Слайд 12

09/02/2023 Параметры сообщений перетаскивания DragEventArgs

09/02/2023

Параметры сообщений перетаскивания DragEventArgs

Слайд 13

09/02/2023 Начало и окончание перетаскивания private void button1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)

09/02/2023

Начало и окончание перетаскивания

private void button1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) {
button1.DoDragDrop(button1.Text, DragDropEffects.Copy

| DragDropEffects.Move);
}
private void textBox1_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.Text))
e.Effect = DragDropEffects.Copy;
else e.Effect = DragDropEffects.None;
}
}
private void textBox1_DragDrop(object sender, System.Windows.Forms.DragEventArgs e) {
textBox1.Text = e.Data.GetData(DataFormats.Text).ToString();
}
Слайд 14

09/02/2023 Клавиатура Система обслуживает клавиатуру через соответствующий драйвер устройства Драйвер возвращает

09/02/2023

Клавиатура

Система обслуживает клавиатуру через соответствующий драйвер устройства
Драйвер возвращает скэн-коды нажатой клавиши


Поддержка конкретного языка ввода обеспечивается трансляцией скэн-кодов в код виртуальной клавиши
Слайд 15

09/02/2023 Сообщения клавиатуры в очереди Сообщение со скэн-кодом и кодом виртуальной

09/02/2023

Сообщения клавиатуры в очереди

Сообщение со скэн-кодом и кодом виртуальной клавиши помещается

в системную очередь сообщений
Система выбирает сообщения и передает их в очередь активного потока, окно которого содержит фокус
Сообщения обрабатываются процедурой окна
Слайд 16

09/02/2023 Фокус клавиатуры Может передаваться между окнами приложения (в случае многодокументного

09/02/2023

Фокус клавиатуры

Может передаваться между окнами приложения (в случае многодокументного интерфейса)
GetFocus() –

сообщает потоку, какое из его окон владеет фокусом
SetFocus() – устанавливает фокус в определенное окно
Передача фокуса клавиатуры от одного окна другому:
WM_KILLFOCUS посылается окну, теряющему фокус
WM_SETFOCUS – окну, получившему его
Слайд 17

09/02/2023 Буферизация сообщений клавиатуры Сообщения о нажатии клавиш хранятся в системной

09/02/2023

Буферизация сообщений клавиатуры

Сообщения о нажатии клавиш хранятся в системной очереди
При нажатии

некоторой клавиши несколько раз сообщения накапливаются и оформляются в одно сообщение с указанием количества повторений
Некоторые комбинации клавиш вызывают переключение фокуса, при этом поток сообщений перенаправляется в другое окно
Слайд 18

09/02/2023 Сообщения о нажатии клавиш Сочетания клавиш могут производить «системные» сообщения,

09/02/2023

Сообщения о нажатии клавиш

Сочетания клавиш могут производить «системные» сообщения, связанные с

акселераторами
Сообщения приходят парами, кроме случаев повторения символа
Слайд 19

09/02/2023 Предобработка KeyDown

09/02/2023

Предобработка KeyDown

Слайд 20

09/02/2023 Предобработка KeyPress

09/02/2023

Предобработка KeyPress

Слайд 21

09/02/2023 Обработчик KeyDown // флаг определяет ввод нечислового символа. private bool

09/02/2023

Обработчик KeyDown

// флаг определяет ввод нечислового символа.
private bool nonNumberEntered = false;
private

void textBox1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) {
nonNumberEntered = false;
// Это цифра с клавиатуры?
if (e.KeyCode < Keys.D0 || e.KeyCode > Keys.D9) {
// Это цифра с боковой клавиатуры?
if (e.KeyCode < Keys.NumPad0 || e.KeyCode > Keys.NumPad9) {
//Это Backspace?
if(e.KeyCode != Keys.Back) {
// Это не цифра
nonNumberEntered = true;
}
}
}
}
Слайд 22

09/02/2023 Обработчик KeyPress private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e) { //

09/02/2023

Обработчик KeyPress

private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e) {
// Проверка флага

из обработчика KeyDown
if (nonNumberEntered == true) {
// отбросить символ.
e.Handled = true;
}
}