Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ch-10.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
681.98 Кб
Скачать

Добавление интерфейса клавиатуры

Теперь появилась новая проблема. Если в меню содержится текст, Windows автоматически добавляет интерфейс клавиатуры. Пункт меню можно выбрать с помощью клавиши <Alt> в комбинации с буквой символьной строки. Но после того как в меню помещен битовый образ, интерфейс клавиатуры отключается.

Это как раз тот самый случай, когда в дело вступает сообщение WM_MENUCHAR. Windows посылает это сообщение оконной процедуре, когда нажимается клавиша <Alt> в комбинации с такой буквой символьной строки, которая не соответствует ни одному пункту меню. Необходимо отслеживать сообщения WM_MENUCHAR и проверять младшее слово параметра wParam (ASCII-код символа нажатой клавиши). Если он соответствует пункту меню, то необходимо возвратить обратно в Windows длинное целое, где старшее слово устанавливается в 2, а младшее слово устанавливается равным индексу того пункта меню, который мы хотим связать с этой клавишей. Остальное выполняет Windows.

Быстрые клавиши

Если выразиться максимально кратко, то быстрые клавиши (keyboard acce- l­erators) — это комбинации клавиш, которые генерируют сообщения WM_COMMAND (в некоторых случаях WM_SYSCOMMAND). Чаще всего быстрые клавиши используются в программах для дублирования действий обычных опций меню. (Однако быстрые клавиши могут выполнять и такие функции, которых нет в меню.) Например, в некоторых программах для Windows имеется меню Edit, которое включает в себя опцию Delete; в этих программах для этой опции быстрой клавишей обычно является клавиша <Del>. Пользователь может выбрать из меню опцию Delete, нажимая <Alt>-комбинацию, или может просто нажать быструю клавишу <Del>. Когда оконная процедура получает сообщение WM_COMMAND, то ей не нужно определять, что именно, меню или быстрая клавиша, использовались.

Зачем нужны быстрые клавиши?

Вы можете спросить: "Зачем нужны быстрые клавиши?" Почему нельзя просто отслеживать сообщения WM_KEYDOWN или WM_CHAR и самому дублировать функции меню? В чем преимущество быстрых клавиш? Для простого приложения, имеющего одно окно, несомненно, можно отслеживать сообщения клавиатуры, но, используя быстрые клавиши, вы получаете определенные преимущества: вам не нужно дублировать логику меню и быстрых клавиш.

Для многооконных приложений с множеством оконных процедур быстрые клавиши очень важны. Как известно, Windows посылает сообщения клавиатуры оконной процедуре того окна, которое в данный момент имеет фокус ввода. Однако, в случае быстрых клавиш Windows посылает сообщение WM_COMMAND той оконной процедуре, чей описатель задан в функции TranslateAccelerator. Как правило, это будет оконная процедура главного окна вашей программы, т. е. того окна, в котором имеется меню. Следовательно, нет необходимости дублировать логику действия быстрых клавиш в каждой оконной процедуре.

Это преимущество становится особенно важным при использовании немодальных окон диалога (которые будут рассмотрены в следующей главе) или дочерних окон, расположенных в рабочей области вашего главного окна. Если при наличии нескольких окон для перемещения между окнами назначается определенная быстрая клавиша, то только одна оконная процедура должна включать в себя эту логику. Дочерние окна не получают от быстрых клавиш сообщений WM_COMMAND.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]