Главная :: Программы для программирования :: wxWidgets :: Перевод книги "Programming with wxWidgets" :: Глава 6 – Обработка данных с устройств ввода. Часть 3
Plug&Pray

Глава 6 – Обработка данных с устройств ввода. Часть 3

6.2 Обработка событий от клавиатуры

События от клавиатуры представлены классом wxKeyEvent. В библиотеке wxWidgets существуют три типа сообщений: нажатие клавиши (key down), отпускание клавиши и набор символа. Нажатие и отпускание – не преобразуемые события, в то время как набор символа — преобразуемое.

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

Чтобы получать события от клавиатуры ваше окно должно находиться в текстовом фокусе, который вы можете принудительно получить, вызвав метод wxWindow::SetFocus, например, по нажатию мыши.

Таблица 6.2 содержит три макроса для обработки событий от клавиатуры.

Ниже представлены главные функции класса wxKeyEvent, которые вы можете использовать в вашей функции-обработчике событий клавиатуры.

Для получения кода клавиши вызывайте функцию GetKeyCode (в Unicode-сборках, можно использовать GetUnicodeKeyCode). Все действительные коды клавиш указаны в таблице 6.3.

WXK_BACK WXK_RIGHT
WXK_TAB WXK_DOWN
WXK_RETURN WXK_SELECT
WXK_ESCAPE WXK_PRINT
WXK_SPACE WXK_EXECUTE
WXK_DELETE WXK_SNAPSHOT
WXK_INSERT
WXK_START WXK_HELP
WXK_LBUTTON
WXK_RBUTTON WXK_NUMPAD0
WXK_CANCEL WXK_NUMPAD1
WXK_MBUTTON WXK_NUMPAD2
WXK_CLEAR WXK_NUMPAD3
WXK_SHIFT WXK_NUMPAD4
WXK_CONTROL WXK_NUMPAD5
WXK_MENU WXK_NUMPAD6
WXK_PAUSE WXK_NUMPAD7
WXK_CAPITAL WXK_NUMPAD8
WXK_PRIOR WXK_NUMPAD9
WXK_NEXT
WXK_END WXK_MULTIPLY
WXK_HOME WXK_ADD
WXK_LEFT WXK_SEPARATOR
WXK_UP WXK_SUBTRACT
WXK_NUMPAD_DECIMAL WXK_PAGEDOWN
WXK_NUMPAD_DIVIDE
WXK_NUMPAD_SPACE
WXK_F1 WXK_NUMPAD_TAB
WXK_F2 WXK_NUMPAD_ENTER
WXK_F3 WXK_NUMPAD_F1
WXK_F4 WXK_NUMPAD_F2
WXK_F5 WXK_NUMPAD_F3
WXK_F6 WXK_NUMPAD_F4
WXK_F7 WXK_NUMPAD_HOME
WXK_F8 WXK_NUMPAD_LEFT
WXK_F9 WXK_NUMPAD_UP
WXK_F10 WXK_NUMPAD_RIGHT
WXK_F11 WXK_NUMPAD_DOWN
WXK_F12 WXK_NUMPAD_PRIOR
WXK_F13 WXK_NUMPAD_PAGEUP
WXK_F14 WXK_NUMPAD_NEXT
WXK_F15 WXK_NUMPAD_PAGEDOWN
WXK_F16 WXK_NUMPAD_END
WXK_F17 WXK_NUMPAD_BEGIN
WXK_F18 WXK_NUMPAD_INSERT
WXK_F19 WXK_NUMPAD_DELETE
WXK_F20 WXK_NUMPAD_EQUAL
WXK_F21 WXK_NUMPAD_MULTIPLY
WXK_F22 WXK_NUMPAD_ADD
WXK_F23 WXK_NUMPAD_SEPARATOR
WXK_F24 WXK_NUMPAD_SUBTRACT
WXK_NUMLOCK WXK_NUMPAD_DEMICAL
WXK_SCROLL WXK_NUMPAD_DEVIDE
WXK_PAGEUP

Для проверки, была ли нажата клавиша-модификатор во время образования события, используйте функции AltDown, MetaDown, ControlDown или ShiftDown. Функция HasModifiers возвращает значение true, если Control или Alt были нажаты во время генерации сообщения нажатия/отпускания (но не Shift или Meta).

Вместо использования функций ControlDown или MetaDown лучше использовать более высокоуровевую функцию CmdDown, которая вызывает MetaDown на Mac OS X и ControlDown на прочих платформах. См. также “Разновидности клавиш-модификаторов” в следующем разделе для более подробных объяснений.

Функция GetPosition возвращает позицию указателя мыши в координатах клиентской области во время получения соответствующих событий.

Совет: если событие нажатия клавиши захвачено и его обработчик не вызвал метод event.Skip(), то данное событие не будет передаваться следующим обработ чикам. Если вы не вызываете event.Skip() для событий, которые не обрабатываете, то на некоторых платформах могут перестать работать горящие клавиши.