Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПОУК / 09 семестр / Книги и методические указания / Руководство программиста в Photon.doc
Источник:
Скачиваний:
364
Добавлен:
04.03.2014
Размер:
7.99 Mб
Скачать

Глава 23. События

Взаимодействия между приложениями, пользователями и сервером Photon'а представлено через структуры данных, называемых событиями. В этой главе обсуждается:

  • События мыши ["Pointer events" – в общем случае, конечно, не мыши, а курсора манипулятора. Но для лучшего понимания пишу – мышь. Ибо как иначе перевести "press the pointer button"??? – Прим. пер.]

  • Генерация события

  • Координаты события

  • Обработчики события – необработанные и отфильтрованные ответные реакции

  • Накопление событий

  • Сжатие событий

  • Перетаскивание

Информация по событию хранится в структуре типа PhEvent_t; см. "Справочник библиотечных функций Photon'а".

События мыши

Чаще всего при обработке того, что пользователь делает, когда указывает на виджет, Вы будете использовать ответные реакции этого виджета.

Нажатие кнопки

Когда Вы нажимаете на кнопку мыши, Photon генерирует событие Ph_EV_BUT_PRESS для виджета, имеющего в этот момент фокус.

Отпускание кнопки

Когда Вы отпускаете нажатую кнопку, Photon генерирует два события Ph_EV_BUT_RELEASE:

  • Одно событие подтипа Ph_EV_RELEASE_REAL

  • Одно – подтипа Ph_EV_RELEASE_PHANTOM

Когда Вы отпускаете кнопку мыши, реальное отпускание попадает на указатель мыши; фантомное отпускание всегда проходит на тот же регион (и позицию), который получил нажатие кнопки.

Другими словами, если Ваш виджет увидел нажатие, он также увидит и фантомное отпускание. И в зависимости от того, где был указатель мыши, вы можете получить, а можете и не получить реальное отпускание. Если Ваш виджет получил и реальное и фантомное отпускание, реальное всегда приходит первым.

Несколько щелчков

Нажимаете ли Вы или отпускаете кнопку мыши, событие включает в себя счётчик щелчков. Как Ваше приложение определяет, что Вы щёлкнули, а не выполнили двойной щелчок?

В данных по событию имеется счётчик щелчков, связанный с событиями Ph_EV_BUT_PRESS и Ph_EV_BUT_RELEASE; чтобы получить эти данные, вызовите функцию PhGetData(). Данными для этих событий являются структуры типа PhPointerEvent_t (см. подробнее в "Справочнике библиотечных функций Photon'а"); её член click_count даёт количество Ваших щелчков кнопкой мыши.

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

Ph_EV_BUT_RELEASE с подтипом Ph_EV_RELEASE_ENDCLICK.

Иными словами, первый щелчок генерирует событие Ph_EV_BUT_PRESS и пару событий Ph_EV_BUT_RELEASE (одно реальное REAL и одно фантомное PHANTOM) со счётчиком click_count, установленным в 1. Затем, в зависимости от того, щёлкнул ли пользователь достаточно быстро вновь или нет, Вы получите либо

  • событие Ph_EV_BUT_PRESS и пару событий Ph_EV_BUT_RELEASE со счётчиком click_count, установленным в 2;

либо

  • событие Ph_EV_BUT_RELEASE с подтипом Ph_EV_RELEASE_ENDCLICK.

После второго щелчка Вы либо получаете третий, либо ENDCLICK, и так далее. Но в конечном счёте Вы получаете ENDCLICK – и в следующий раз, когда пользователь щёлкнет, счётчик щелчков вновь равен 1.