9.5 - Клавиши - ускорители и меню

Использование клавиши – ускорителя является тем же самым действием, что и выбор пункта меню: оба действия заставляют Windows отправлять сообщение WM_COMMAND или WM_SYSCOMMAND в соответствующую оконную процедуру. Сообщение WM_COMMAND включает в себя идентификатор, который оконная процедура проверяет, чтобы определить источник сообщения. Если сообщение WM_COMMAND создал акселератор, то идентификатор – для этой клавиши - ускорителя. Точно так же, если сообщение WM_COMMAND создал пункт меню, то идентификатор - этого пункта меню. Поскольку акселератор предусматривает ярлык для выбора команды из меню, прикладная программа обычно присваивает тот же самый идентификатор и для клавиши - ускорителя и соответствующему пункту меню.

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

Идентификатор определяет, генерирует ли клавиша - ускоритель сообщение WM_SYSCOMMAND или WM_COMMAND. Если идентификатор имеет то же самое значение, что и пункт меню в Системном меню, акселератор создает сообщение WM_SYSCOMMAND. В противном случае, клавиша - ускоритель генерирует сообщение WM_COMMAND.

Если клавиша - ускоритель имеет тот же самый идентификатор, что и пункт меню, а пункт меню недоступен или заблокирован, акселератор блокируется и не генерирует сообщение WM_SYSCOMMAND или WM_COMMAND. Клавиша – ускоритель также не генерирует сообщение команды, если соответствующее окно свернуто.

Когда пользователь использует клавишу - ускоритель, которая соответствует пункту меню, оконная процедура принимает сообщения WM_INITMENU и WM_INITMENUPOPUP, как если бы пользователь выбрал пункт меню. За информацией относительно того, как обрабатывать эти сообщения, обратитесь к статье. Меню.

Клавиша - ускоритель, которая соответствует пункту меню, должна быть включена в текст пункта меню.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Владимир Соковиков - 03.07.2002