Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
WinAPI.docx
Скачиваний:
49
Добавлен:
16.12.2018
Размер:
3.43 Mб
Скачать

5.1 Клавиатура. Основные понятия

Как вы, наверное, догадались, основанная на сообщениях архитектура Windows идеальна для работы с клавиатурой. Ваша программа узнает о нажатиях клавиш посредством сообщений, которые посылаются оконной процедуре.

На самом деле все происходит не столь просто: когда пользователь нажимает и отпускает клавиши, драйвер клавиатуры передает информацию о нажатии клавиш в Windows. Windows сохраняет эту информацию (в виде сообщений) в системной очереди сообщений. Затем она передает сообщения клавиатуры, по одному за раз, в очередь сообщений программы, содержащей окно, имеющее "фокус ввода" (input focus) (о котором вскоре будет рассказано). Затем программа отправляет сообщения соответствующей оконной процедуре.

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

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

5.1.1 Игнорирование клавиатуры

Хотя клавиатура является основным источником пользовательского ввода программ для Windows, вашей программе не нужно реагировать на каждое получаемое от клавиатуры сообщение. Windows сама обрабатывает многие функции клавиатуры. Например, вы можете игнорировать нажатие системных клавиш. В таких нажатиях обычно используется клавиша Alt.

Программе не нужно отслеживать нажатие этих клавиш, поскольку Windows извещает программу об эффекте, вызванном их нажатием. (Однако, при желании программа сама может их отслеживать.) Например, когда пользователь Windows выбирает пункт меню с помощью клавиатуры, Windows посылает программе сообщение, что выбран пункт меню, независимо от того, был ли он выбран с помощью мыши, или с помощью клавиатуры.

В некоторых программах для Windows используются "быстрые клавиши" (keyboard accelerators) для быстрого доступа к часто употребляемым пунктам меню. В качестве быстрых клавиш обычно используются функциональные клавиши или комбинация символьной клавиши и клавиши <Ctrl>. Такие быстрые клавиши определяются в описании ресурсов программы.

Окна диалога также имеют интерфейс клавиатуры, но обычно программам не нужно отслеживать клавиатурные события, когда активно окно диалога. Интерфейс клавиатуры обслуживается самой Windows, и Windows посылает сообщения вашей программе о действиях, соответствующих нажимаемым клавишам. В окнах диалога могут содержаться "окна редактирования" (edit) для ввода текста. Это обычно небольшие окна, в которых пользователь набирает строки символов. Windows управляет всей логикой окон редактирования и дает вашей программе окончательное содержимое этих окон, после того, как пользователь завершит ввод строки.

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