Окт 13

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

Взаимодействие приложения с GDI осуществляется при непременном участии еще одного посредника — так называемого контекста устройства.
Контекст устройства {device context) — это внутренняя структура данных, которая определяет набор графических объектов и ассоциированных с ними атрибутов, а также графических режимов, влияющих на вывод.
В следующем списке приведены основные графические объекты:
Перо (реп) для рисования линий.
Кисть (brush) для заполнения фона или заливки фигур.
Растровое изображение (bitmap) для отображения в указанной области окна.
Палитра (palette) для определения набора доступных цветов.
Шрифт (font) для вывода текста.
Регион (region) для отсечения области вывода.
Если необходимо рисовать на устройстве графического вывода (экране дисплея или принтере), то сначала нужно получить дескриптор контекста устройства. Возвращая этот дескриптор после вызова соответствующих функций, Windows тем самым предоставляет разработчику право на использование данного устройства. После этого дескриптор контекста устройства передается как параметр в функции GDI, чтобы идентифицировать устройство, на котором должно выполняться рисование.
Контекст устройства содержит много атрибутов, определяющих поведение функций GDI. Благодаря этому списки параметров функций GDI содержат только самую необходимую информацию, например начальные координаты или размеры графического объекта. Все остальное система извлекает из контекста устройства.
Когда в приложении Hellol вызывалась функция DrawText, то в ее параметрах нужно было указать только дескриптор контекста устройства, адрес строки с выводимым текстом, его длину, положение и размеры прямоугольной области для размещения текста, а также способ позиционирования текста внутри этой области. Однако при этом не указывались шрифт, цвет текста, цвет фона, режим смешивания фона, режим рисования и другие атрибуты, потому что все они являются частью контекста устройства и имеют значения по умолчанию. И только если значения по умолчанию не устраивают разработчика, необходимо вызывать функции GDI, изменяющие значения соответствующих атрибутов.