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

Контекст памяти создается при вызове функции CreateCompatibleDC. Эта функция создает контекст памяти, совместимый с определенным физическим устройством.

Еще одним типом контекстов устройств является контекст метафайла. Метафайл — это по сути не зависимая от устройства запись команд GDI. Win32 распознает 2 типа метафайлов: стандартные и расширенные. Стандартные метафайлы совместимы с Windows 3.1, но они не реализуют полной независимости от устройства; по этой причине для новых приложений рекомендуется использовать расширенные мета-файлы.

Контекст метафайла создается при вызове функции CreateMetaFile или, в случае расширенных мета-файлов, функции CreateEnhMetaFile. После завершения рисования в метафайле приложение закрывает его с помощью функции CloseMetaFile (CloseEnhMetaFile). Этот вызов возвращает дескриптор метафайла, который впоследствии можно использовать в вызовах PlayMetaFile (PlayEnhMetaFile) или различных других функций манипулирования метафайлами. Для метафайлов, которые прежде были записаны на диск, их дескриптор можно получить при вызове функции GetMetaFile (GetEnhMetaFile).

Относительно немного приложений работает с метафайлами непосредственно. Однако большинство приложений неявно используют метафайлы через механизм OLE. Heзависимый от устройства формат метафайлов используется OLE для графического представления внедренных и связанных объектов. Приложениям, которые отображают внедренные объекты, таким образом, не нужно вызывать приложение-сервер OLE (которое даже может быть не инсталлировано в системе) при каждой перерисовке объекта OLE они воспроизводят содержимое метафайла.

Информационный контекст

Информационный контекст используется для получения информации об определенном устройстве. Информационный контекст создается при вызове функции CreateIC. Создание информационного контекста требует гораздо меньше накладных расходов, чем создание контекста устройства, поэтому этот метод предпочтительнее для получения информации об устройстве. После использования информационный контекст необходимо удалить, вызвав функцию DeleteIC.

Координаты

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

Логические координаты и координаты устройства

Хотя в основе преобразования логических координат в физические лежит простой принцип, иногда возникают проблемы и для опытных программистов.

Преобразования логических координат в физические выполняется посредством указания характеристик окна и области просмотра (смотрового окна). В этом контексте окно представляет пространство логических координат, а область просмотра — пространство физических координат устройства.

И для окна, и для области просмотра необходимо определить две пары значений. Одна пара указывает горизонтальную и вертикальную координаты начала отсчета (X, Y); другая — указывает горизонтальный и вертикальный экстент (extent) (пространство вывода высота, ширина (H, W)).

 


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

Начало координат и экстент системы логических и физических координат можно установить, используя следующие функции: SetViewportExtEx, SetViewportOrgEx, SetWindowExtEx, SetWindowOrgEx. (Использование старых функций SetViewportExt, SetViewportOrg, SetWindowExt, SetWindowOrg не поддерживается в Win32.)

Для справки приведем формулы преобразования логических координат в физические и наоборот: