События от клавиатуры представлены классом 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() для событий, которые не обрабатываете, то на некоторых платформах могут перестать работать горящие клавиши.