Ускорители и меню


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

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

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

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

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

Ускоритель, который соответствует пункт меню, должен включаться в текст пункта меню.

Назад в оглавление
На главную страницу

Hosted by uCoz