Операционная система Microsoft Windows 3.1 для программиста -том 1

         

Клавиатура


5.1.

5.2.

5.3.

5.4.

5.5.

5.6.

5.7.

Способы работы с клавиатурой в среде Windows коренным образом отличаются от тех, к которым вы привыкли, когда составляли программы для MS-DOS. Из-за чрезвычайно слабой поддержки клавиатуры со стороны MS-DOS программы обычно вызывали прерывание INT16h, обработчик которого находится в BIOS. Приложения Windows не могут воспользоваться этим прерыванием, но в их распоряжении находится куда более мощный механизм сообщений.

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

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

Для распределения сообщений от клавиатуры используется концепция так называемого фокуса ввода (input focus). Фокус ввода - это атрибут, который может присваиваться окну, созданному приложением или Windows. Если окно имеет фокус ввода, соответствующая функция окна получает все клавиатурные сообщения из системной очереди.

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

Функция окна может проследить за получением и потерей фокуса ввода.
Когда окно получает фокус ввода, функции окна передается сообщение WM_SETFOCUS. Когда окно теряет фокус ввода, функции окна передается сообщение WM_KILLFOCUS. В ответ на эти сообщения функция окна не может запретить получение или потерю фокуса ввода, так что это сообщение носит чисто информирующий характер.

Программный интерфейс Windows содержит две функции, позволяющие узнать или изменить окно, владеющее фокусом ввода. Эти функции имеют соответственно имена GetFocus и SetFocus.

Сообщения, генерируемые драйвером клавиатуры, являются сообщениями низкого уровня. Они несут в себе такую информацию, как, например, скан-код нажатой клавиши. Приложения не пользуются такими сообщениями. Операционная система Windows выполняет преобразование клавиатурных сообщений низкого уровня в сообщения, которые содержат коды виртуальных клавиш (virtual-key code).

Код виртуальной клавиши соответствуют не расположению клавиши на клавиатуре, а действию, которое выполняет эта клавиша. Приложение обрабатывает коды виртуальных клавиш, а соответствие виртуальных и физических клавиш обеспечивается драйвером клавиатуры.

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

Сразу отметим, что приложения Windows редко используют методику посимвольного ввода и отображения, широко распространенную при создании программ MS-DOS.


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

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

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

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

Некоторые приложения могут даже полностью игнорировать присутствие клавиатуры. Так, например, поступали все наши предыдущие примеры приложений.


Содержание раздела