Контекст устройств. GDI, драйверы и устройства вывода.

Страницы работы

Содержание работы

ЛЕКЦИЯ  #8  - КОНТЕКСТ  УСТРОЙСТВ

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

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

GDI, драйверы и устройства вывода

Приложения рисуют на устройствах вывода, вызывая функции интерфейса графических устройств (graphics device interface — GDI). Библиотека GDI gdi.dll, содержащая эти функции, в свою очередь вызывает функции специальных для устройств библиотек или драйверов устройств. Драйверы устройств выполняют операции на реальном физическом оборудовании. Драйверы являются частью Windows или независимым расширением (для менее распространенного оборудования).

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

·  Преобразование логических координат в реальные физические координаты устройства;

·  Использование объектов рисования, таких, как шрифты, перья или кисти для выполнения необходимых операций;

·  Отсечение функций рисования применительно к видимой области.

Контексты устройств

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

Перед использованием контекста устройства его необходимо создать. Наиболее общей функцией создания контекста устройства является функция CreateDC. При вызове этой функции приложение указывает устройство, для которого создается контекст, драйвер, физический порт устройства и специфические для устройства параметры инициализации.

При рисовании на экране приложению не требуется создавать контекст устройства, используя CreateDC. Вместо этого оно может получить дескриптор контекста устройства, представляющего клиентскую область окна с помощью функции GetDC или целое окно (включающее неклиентскую область) с помощью функции GetWindowDC.

Типичной функцией рисования GDI является Rectangle. Для рисования прямоугольника приложение может сделать следующий вызов:

Rectangle(hDC, О, О, 200, 100);

Этот вызов рисует прямоугольник на устройстве, определенном дескриптором hDC, с верхним левым углом с координатами [0,0] и нижним правым углом — [200,100]. Понятно, что происходит множество невидимых действий перед тем, как этот прямоугольник действительно появляется на экране.

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

Типы контекстов устройств

Для дисплея Windows различает общие и частные контексты устройств. Общий контекст устройства представляет общий для всех приложений ресурс. Частный контекст устройства создается для окон классов окна со стилем CS_OWNDC. Этот контекст устройства удаляется при разрушении соответствующего окна.

Контексты памяти и метафайлов

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

Кроме очевидного использования растровых изображений (например, в графическом редакторе Windows 95 Paint) контекст памяти имеет и другое практическое применение в графических приложениях. Рисуя в контексте памяти и передавая его содержимое только после завершения рисования, приложение может уменьшить нежелательное мерцание экрана. Разумно используя несколько контекстов памяти, приложения могут создавать эффект плавной анимации. Несколько функций, рассмотренных в этой главе, помогут эффективно преобразовать битовые данные из одного контекста устройства в другой.

Похожие материалы

Информация о работе