Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Литература_1 / photon_old.doc
Скачиваний:
38
Добавлен:
02.04.2015
Размер:
7.88 Mб
Скачать
      1. Обработка горячих клавиш

Вот как работает горячая клавиша:

  • когда событие клавиши достигает окна, окно направляет событие своим порождённым виджетам;

  • если порождение это событие поглощает, ничего больше не происходит;

  • в противном случае событие проверяется в списке горячих клавиш окна. Если горячая клавиша найдена, вызывается ответная реакция;

  • если ответная реакция не найдена, просматривается список горячих клавиш родительского окна, и далее наверх по иерархии окон.

Ресурс Pt_ARG_CONTAINER_FLAGS виджетов контейнерного класса включает несколько флагов, оказывающих влияние на обработку горячих клавиш:

Pt_HOTKEY_TERMINATOR

Не допускает проход поиска горячей клавиши наверх к родительскому контейнеру. Флаг Pt_HOTKEY_TERMINATOR работает, только если он установлен в разобранном виджете контейнерного класса.

Pt_HOTKEYS_FIRST

Обработка событий клавиш, достигших контейнера, как горячих клавиш, перед тем как они проходят к потомкам контейнера. Если событие является горячей клавишей, оно поглощается, т.е. не проходит к потомкам.

      1. Отключение горячих клавиш

Выдача пользователю визуальной индикации, что горячая клавиша отключена, отличается от действительного отключения горячей клавиши.

Для того, чтобы выдать визуальную индикацию, используйте технологию, соответствующую виджету:

  • если горячая клавиша присоединена к кнопке, установите флаг Pt_GHOST и снимите флаги Pt_SELECTABLE и Pt_GETS_FOCUS в ресурсе кнопки Pt_ARG_FLAGS;

  • если горячая клавиша присоединена к пункту меню, созданному в PhAB, вызовите ApModifyItemState();

  • ...

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

  • Не отключайте горячую клавишу. Вместо этого, в качестве первого, что должно быть выполнено в программном коде ответной реакции горячей клавиши, введите проверку на нечто, что должно быть сделано. Если это не сделано, просто вернитесь из ответной реакции. Например, если ответные реакции горячей клавиши – это "вклеить" текст, проверьте, есть ли что "вклеивать". Если нечего, просто вернитесь

или

  • За исключением разобранных виджетов, если виджет, к которому присоединена ответная реакция горячей клавиши, не является выбираемым, горячая клавиша обрабатывается так, как будто она не существует. Чтобы виджет был выбираемым, должен быть установлен флаг Pt_SELECTABLE в ресурсе Pt_ARG_FLAGS.

Хорошим основанием для такого подхода является то, что это работает, даже если Ваше приложение имеет одну и ту же горячую клавишу, описанную более чем в одном окне. Например, мы можем иметь меню "Edit" в базовом окне и кнопку "Erase" в порождённом окне, оба с сочетанием <Alt>+<E> в качестве горячей клавиши. Если в текущий момент фокус имеет порождённое окно и пользователь нажимает <Alt>+<E>, вызывается ответная реакция кнопки "Erase" порождённого окна.

Теперь, если мы отменим кнопку "Erase" в порождённом окне, мы хотим использовать <Alt>+<E> для того, чтобы появилось меню "Edit" базового окна. В этом сценарии, пока кнопка "Erase" является выбираемой, будет вызываться её ответная реакция. Поэтому мы просто делаем кнопку "Erase" невыбираемой. Теперь, когда пользователь нажимает <Alt>+<E>, появляется меню "Edit" базового окна, даже при том, что порождённое окно ещё имеет фокус.

или

  • Вы можете вызвать PtRemoveHotkeyHandler(), чтобы удалить горячую клавишу, и впоследствии вызвать PtAddHotkeyHandler(), чтобы включить её снова.

Соседние файлы в папке Литература_1