Аппаратные сообщения.
Сообщения, которые приложение (ваша программа) получает от клавиатуры, различаются на аппаратные ( keystrokes ) и символьные ( characters ). Любое нажатие на клавиатуре генерирует аппаратное сообщение. Нажатие клавиши с каким-либо символом (буквой, цифрой, значком) должно привести к тому, что Windows , кроме аппаратного сообщения, пошлет в вашу программу символьное сообщение. Как это происходит, мы рассмотрим позже, а сейчас подробно рассмотрим аппаратные сообщения.
Операционная система выделяет в потоке аппаратных сообщений системные и несистемные сообщения. Системные сообщения обычно вырабатываются при нажатии клавиш в сочетании с клавишей < Alt >. Эти сообщения вызывают опции меню программы или системного меню (< Alt +функциональная клавиша>,< Alt + Esc >), или используются для системных функций, таких как смена активного окна (< Alt + Tab >). Обычно программа игнорирует системные сообщения, однако иногда возникает необходимость в их обработке.
Типы сообщений, поступающих в приложение от клавиатуры приведены в следующей таблице:
Типы сообщений
Несистемные аппаратные сообщения Системные аппаратные сообщения
Клавиша нажата WM_KEYDOWN WM_SYSKEYDOWN
Клавиша отпущена WM_KEYUP WM_SYSKEYUP
Обычно сообщения о нажатии и отпускании клавиши появляются парами. Исключение составляет тот случай, когда пользователь не отпускает клавишу и включается автоповтор. В последнем случае в программу направляется поток сообщений о нажатии клавиши.
Одновременно с одним из аппаратных сообщений приходят два параметра сообщения: lParam и wParam . Переменная lParam состоит из 6 полей:
Счетчик повторений. Равен числу нажатий клавиши, которое отражено в сообщении. В случае, когда его значение отлично от 1 (больше одного нажатия), это обычно означает, что программа не успевает обработать сообщения в реальном времени, либо система загружена в данный момент какой-либо работой. Ваша программа может как игнорировать число нажатий (реагировать только на сам факт нажатия), либо обрабатывать все нажатий клавиши клавиатуры.
Скан-код. Является кодом клавиатуры, генерируемым аппаратурой, то есть является тем кодом, который непосредственно приходит от клавиатуры. Обычно игнорируется приложением.
Флаг расширенной клавиатуры. Устанавливается в 1, если сообщение пришло от дополнительной клавиатуры (клавиши управления курсором, цифровая клавиатура и др.)
Код контекста. Код контекста устанавливается в 1, если нажата клавиша < Alt >. Часто, при помощи этого бита можно выделить системные сообщения.
– 31 –
Флаг предыдущего состояния клавиши. Равен 0, если в предыдущем состоянии клавиша была отпущена, и 1, если в предыдущем состоянии она была нажата.
Флаг состояния клавиши. Равен 0, если клавиши нажимается, и 1, если клавиша отпускается.
Второй параметр wParam содержит виртуальный код клавиши ( virtual key code ), идентифицирующий нажатую и отпущенную клавишу, чем реализуется аппаратная независимость программного представления клавиатуры. Виртуальные коды клавиш, которые вы используете, имеют имена, определенные в заголовочных файлах Windows . Вот несколько примеров виртуальных кодов:
Нажатая клавиша
Ctrl-Break
Tab ( табуляция ) Shift
Enter Ctrl Alt Esc
Пробел Стрелка влево Стрелка вправо Стрелка вниз Стрелка вверх Delete
End Home Page Up
Page Down F1
Идентификатор, определенный в windows . h
VK_CANCEL VK_TAB VK_SHIFT VK_ENTER VK_CONTROL VK_MENU VK_ESCAPE VK_SPACE VK_LEFT VK_RIGHT VK_DOWN VK_UP VK_DELETE VK_END VK_HOME VK_PRIOR VK_NEXT VK_F1
Десятичный код
3 9 13 16 17 18 27 32 37 38 40 39 46 35 36 33 34 70
Дата добавления: 2016-11-22; просмотров: 1494;