Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2 курс / Лекции / Лекция 9.pptx
Скачиваний:
41
Добавлен:
18.02.2023
Размер:
149.03 Кб
Скачать

Лекция 9

Интерфейс графических устройств

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

Понятие «Контекст устройства» является частью графической подсистемы Windows GDI.

Контекст устройства — это внутренняя структура, для управления информацией о выходном устройстве. Она содержит информацию о параметрах и атрибутах вывода графики на устройство (например, дисплей или принтер). Вместо направления вывода непосредственно на аппаратное устройство, приложение направляет его в контекст устройства, а затем Windows пересылает вывод в аппаратное устройство.

В GDI существуют пять типов контекста устройства — связанный с дисплеем (Display DC), принтером (Printer DC), контекст виртуального устройства в памяти (Memory DC), контекст метафайла (Metafile DC) и специальный вид контекста — информационный (Information DC).

 

Перед рисованием, система должна подготовить устройство

отображения к операциям рисования. Контекст устройства (DC)

отображения определяет совокупность графических объектов и связанных

с ними атрибутов и графические режимы, которые оказывают влияние на

вывод данных.

 

 

Когда приложение предоставляет контекст устройства (DC)

отображения через вызовы функций GDI, то GDI использует информацию в

контексте, чтобы генерировать вывод данных в заданном окне, не нарушая

целостность других окон или других частей экрана.

 

Система предусматривает пять видов контекстов устройства (DC)

 

Тип

Предназначение

отображения.

Дает возможность рисовать в рабочей области заданного окна.

common(общи

й)

 

 

class(класса) Дает возможность рисовать в рабочей области заданного окна.

parent

Даёт возможность рисовать где угодно в окне. Хотя родительский

контекст устройства также даёт возможность рисовать в

(родительский

родительском окне, но он не предназначается, чтобы использоваться

)

 

таким образом.

 

 

private(частны Дает возможность рисовать в рабочей области заданного окна.

й)

Система

предоставляет общий, класса, родительский или частный

window(оконн

Даёт возможность рисовать где угодно в окне.

контекст устройства окну, основанному на типе контекста устройства (DC)

ый)

 

отображения, установленном в этом стиле класса окна.

 

Система предоставляет контекст устройства окна только тогда, когда

приложение явно запрашивает его, например при помощи вызова функции

GetWindowDC или GetDCEx. Во всех случаях приложение может

использовать функцию WindowFromDC, чтобы определить какое окно, какой

контекст устройства (DC) отображения в текущий момент представляются.

Фунции работы с контекстами

Функции WinAPI для работы с контекстами устройства:

CreateDC - создает контекст устpойства для устpойства (например, принтера).

DeleteDC - удаляет контекст устpойства, созданный с помощью функции CreateDC. Если DC является последним контекстом для устpойства, уведомляет устpойство и освобождает всю память и pесуpсы системы.

GetDC - считывает контекст дисплея для выполнения опеpаций интеpфейса GDI в области пользователя окна.

GetDCEx - считывает контекст дисплея для окна.

GetWindowDC - считывает контекст дисплея, обычно используемый для pаскpаски в окне областей, не являющихся областями пользователя.

ReleaseDC - освобождает общий или оконный (не влияющий на класс или локальность) контекст устpойства, делая его доступным для дpугих пpикладных задач.

RestoreDC - восстанавливает контекст устpойства в пpедыдущее состояние, указанное паpаметpом SaveDC, из стека контекста. Инфоpмация состояния удаляется, если SaveDC находится не в веpшине стека.

SaveDC - сохpаняет текущее состояние DC в стеке контекста для последующего использования.

WindowFromDC – возвращает дескриптор окна, связанного с указанным контекстом устройства.

Больше функций: Р.Саймон «Microsoft Windows API Справочник системного программиста», страница 375.

Контекст устройства отображения по умолчанию

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

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

Приложение может изменить значения атрибутов контекста устройства

(DC) отображения при помощи использования выбора и атрибутов функции,

такой как SelectObject, SetMapMode и SetTextColor. Например, приложение

может изменить значения по умолчанию единиц измерения в системе

координат при помощи использования функции SetMapMode, чтобы изменить

режим отображения.

 

Нижеследующая таблица показывает значения по умолчанию для

атрибутов контекста устройства (DC) отображения.

Атрибут

Значение по умолчанию

Цвет фона

Цвет фона устанавливается из Панели Управления

(Control Panel) (обычно белый цвет).

Фоновый режим

OPAQUE

Точечный рисунок

Нет

Кисть

WHITE_BRUSH

Начало координат кисти

(0,0)

 

Все окно или рабочая область с обновляемым

Регион отсечения

регионом обрезается, соответственно. Дочерние и

всплывающие окна в рабочей области также могут

 

быть обрезаны.

Палитра

DEFAULT_PALETTE

Позиция текущего пера

(0,0)

Начало координат

Левый верхний угол окна или рабочей области.

устройства

 

Режим рисования

R2_COPYPEN

Шрифт

SYSTEM_FONT

Межмежзнаковый

0

интервал

 

Режим отображения

MM_TEXT

Перо

BLACK_PEN

Многоугольник (Polygon) -

ALTERNATE

режим закрашивания

 

Метод растягивания

BLACKONWHITE

Цвет текста

Цвет текста устанавливается из Панели

Управления (Control Panel) (обычно черный).

Протяженность области

(1,1)

ввода

 

Точка окна, являющаяся

(0,0)

началом координат

 

Непрерывная область

(1,1)

окна

 

Начало координат окна

(0,0)

Общие контексты

Общий контекст устройства (common device context) используется для того, чтобы рисовать в рабочей области окна. Система предоставляет общий контекст устройства по умолчанию для любого окна, класс которого явно не устанавливает стиль контекста устройства (DC) отображения. Общие контексты устройства обычно используются окнами, которые могут рисовать без больших изменений атрибутов контекста устройства. Общие контексты устройства удобны тем, что они не требуют дополнительной памяти или системных ресурсов, но они могут быть неудобны тем, что приложение должно установить много атрибутов, перед тем, как использовать их.

Приложение должно всегда освобождать его как можно быстрее после операции рисования. После того, как общий контекст устройства освобожден, он больше не действителен и приложение не должно попытаться рисовать при помощи него. Чтобы рисовать снова, приложение должно извлечь новый общий контекст устройства и продолжать извлекать и освобождать общий контекст устройства каждый раз, когда оно рисует в окне. Если приложение извлекает дескриптор контекста устройства при помощи использования функцииGetDC, то оно должно использовать функцию ReleaseDC, чтобы освободить дескриптор. Точно так же для каждой функции BeginPaint, приложение должно использовать соответствующую функциюEndPaint.

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

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