Клавиатура. Порядок прохождения сообщений. (Лекция 6)

Содержание

Слайд 2

Порядок прохождения сообщений М1 М2

Порядок прохождения сообщений

М1

М2

Слайд 3

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

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

Слайд 4

Активное окно

Активное окно

Слайд 5

Активное окно Активное окно – это окно, имеющее фокус ввода (input

Активное окно

Активное окно – это окно, имеющее фокус ввода (input

focus), либо имеющее дочернее окно, которое имеет фокус ввода.

WM_SETFOCUS - окно получает фокус ввода

WM_KILLFOCUS - окно теряет фокус ввода

Слайд 6

Alt + Alt +

Alt +

Alt +

Слайд 7

Типы аппаратных сообщений от клавиатуры

Типы аппаратных сообщений от клавиатуры

Слайд 8

Содержимое lParam

Содержимое lParam

Слайд 9

Скан - код клавиатуры 1

Скан - код клавиатуры

1

Слайд 10

Содержимое lParam

Содержимое lParam

Слайд 11

Второй параметр wParam содержит виртуальный код клавиши (virtual key code), идентифицирующий

Второй параметр wParam содержит виртуальный код клавиши (virtual key code), идентифицирующий

нажатую и отпущенную клавишу, чем реализуется аппаратная независимость программного представления клавиатуры.
Слайд 12

Получение времени нажатия клавиши и состояния управляющих клавиш. LONG GetMessageTime(void); //

Получение времени нажатия клавиши и состояния управляющих клавиш.

LONG GetMessageTime(void); // время

возникновения
обрабатываемого сообщения

SHORT GetKeyState(VK_SHIFT); // состояние клавиш в момент
образования сообщения

SHORT GetAsyncKeyState(VK_SHIFT); // состояние клавиш в
момент настоящий момент

Слайд 13

Возникновение символьного сообщения while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } Очередь сообщений WM_KEYDOWN WM_CHAR

Возникновение символьного сообщения

while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}

Очередь сообщений

WM_KEYDOWN

WM_CHAR

Слайд 14

Типы символьных сообщений Содержимое lParam - аналогично аппаратным сообщениям wParam -

Типы символьных сообщений

Содержимое lParam - аналогично аппаратным сообщениям
wParam - содержит символьный

код клавиши в системе ASCII
Слайд 15

Пример 1 В качестве примера рассмотрим случай, когда пользователь программы нажимает

Пример 1

В качестве примера рассмотрим случай, когда пользователь программы нажимает и

отпускает клавишу "А". Если переключатель не включен и не нажата клавиша , то оконная процедура получит три следующих сообщения:
Сообщение Клавиша или код
WM_KEYDOWN Виртуальная клавиша "А"
WM_CHAR ASCII код "а"
WM_KEYUP Виртуальная клавиша "А"
Слайд 16

Пример 2 Если вы нажимаете "А" при нажатой клавише , то

Пример 2

Если вы нажимаете "А" при нажатой клавише , то оконная

процедура получит следующий ряд сообщений:
Сообщение Клавиша или код
WM_KEYDOWN Виртуальная клавиша VK_SHIFT
WM_KEYDOWN Виртуальная клавиша "А"
WM_CHAR ASCII код "А"
WM_KEYUP Виртуальная клавиша "А"
WM_KEYUP Виртуальная клавиша VK_SHIFT