Главная » Win32 API » Назначение и типы контекстов

0

Основой механизма взаимодействия приложений Windows с гра­фическими устройствами (экран и принтер) является интерфейс гра­фических устройств GDI (Graphics Device Interface). GDI это сово­купность программных средств Windows, организующих вывод на эк­ран или принтер графических объектов текстовых строк, геометри­ческих фигур, изображений и т.п. Windows-приложение не имеет не­посредственного доступа к аппаратуре. Вместо этого оно вызывает функции GDI, которые работают с драйверами физических устройств. Иначе говоря, приложения, обращаясь к функциям GDI, работают не с физическими устройствами вывода, а с логическими, и при вызове функций не учитывается физический способ отображения. Возможно­сти вывода и аппаратные особенности устройства учитывает его драй­вер. Благодаря этому механизму вывода графической информации приложения способны работать с любым устройством вывода, драйвер которого установлен в системе. Код библиотеки GDI находится в фай­ле gdi32.dll. Драйверы стандартных устройств поставляются как часть подсистемы ввода-вывода Windows, а драйверы специализированных устройств предоставляются их производителями.

Примерами функциям GDI являются функции создания инструмен­тов рисования (кисти, перья, шрифты), функции управления цветами, режимами рисования, функции вывода графических объектов. В зада­чу GDI входит контроль за границами выводимых объектов, чтобы они не затерли другие окна.

Параметры вывода на устройство должны быть установлены в кон­тексте устройства (DC, Device Context) с помощью функций GDI. Контекст устройства это системная структура данных, которая со­держит характеристики устройства вывода и дескрипторы выбранных графических объектов и режимов рисования.

К основным графическим объектам относятся:

•           Перо (реп) для рисования линий;.

•           Кисть (brash) для заполнения фона или заливки фигур;

•           Растровое изображение (bitmap);

•           Палитра (palette) для определения набора доступных цветов;

•           Шрифт (font) для вывода текста;

•           Регион (region) для отсечения области вывода.

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

Обновляемый (update)vum недействительный(1п\>аИй) регион— это часть окна, которая требует обновления. Видимый (visible) регион — это та часть окна, которую в данный момент видит пользователь. Система изменяет видимый регион окна и в том случае, когда окно из­меняет размеры, и в том случае, когда перемещение другого окна либо закрывает часть данного окна, либо открывает закрытую прежде часть. Регион отсечения (clipping region) ограничивает область, внутри ко­торой разрешается отображение графической информации. Работа с регионами осуществляется с помощью функций SetWindowRgn, Se-lectClipPath, SelectClipRgn.

Если при вызове функции CreateWindow был использован стиль WS_CLIPCHILDREN или WS_CLIPSIBLINGS, то это вносит дополни­тельные правила в определение видимого региона, исключая из него любое дочернее или любые окна того же класса. Благодаря этому ри­сование не затрагивает отображаемые области таких окон.

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

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

Различают следующие типы контекстов устройства:

•     контекст монитора;

•     контекст принтера;

•     контекст в памяти (совместимый контекст);

•     метафайловый контекст;

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

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

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

Источник: Сучкова, Л.И. Win32 API: основы программирования: учебное пособие/ Л.И. Сучкова; АлтГТУ им. ИИ. Ползунова. -Барнаул, АлтГТУ, 2010. 138 с, ил.

По теме:

  • Комментарии