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

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

Все GUI-приложения должны каким-либо образом реагировать на данные, поступающие от устройства ввода. Эта глава покажет как можно взаимодействовать с мышью, клавиатурой и джойстиком.

6.1 Получение данных от мыши

Упрощенно говоря, приложение получает от мыши два вида событий: основные события мыши, посылаемые с помощью класса wxMouseEvent, и “сырые” события, передаваемые вашей функции-обработчику неинтерпретированными. При этом действия, связанные с элементами управления (такими как, например, кнопка), часто являются результатом интерпретации событий от мыши (или других устройств) как отдельных команд.

Например, когда вы добавляете макрос EVT_BUTTON в таблицу событий, то вы перехватываете событие wxCommandEvent, которое было сгенерировано классом wxButton.

Это, в свою очередь, происходит следующим образом: кнопка перехватывает событие от мыши EVT_LEFT_DOWN и порождает управляющее событие. Конечно, на большинстве платформ, класс wxButton реализован как “родной” и не использует низкоуровневую обработку событий wxWidgets, но так будет происходить для несуществующих на платформе классов.

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

Вы можете перехватить события отпускания (key up), нажатия (key down) и двойного клика левой, средней или правой кнопками мыши. Можно также перехватить движения мыши, как с нажатой кнопкой, так и без. Вы можете перехватить события, говорящие о входе курсора в область окна и о выходе из этой области. Наконец, возможно перехватить события от колесика прокрутки, если на мыши таковое присутствует.

После получения событий от мыши, вы можете проверить состояние ее кнопок, а также клавиш-модификаторов (Shift, Alt, Control и Meta). Также доступна информация о текущем положении указателя мыши относительно верхнего левого угла клиентской области окна.

Таблица 6.1 содержит макросы таблицы событий, которые вы можете использовать. Класс wxMouseEvent не передается по цепочке родителям окна, поэтому для обработки таких событий вы должны унаследовать свой класс от класса окна или от wxEvtHandler, а потом модифицировать обработчик событий для необходимых подокон с помощью функций SetEventHandler или PushEventHandler. Или же, вы можете выполнить динамическую привязку с помощью функции Connect.