Опубликован: 15.11.2010 | Уровень: для всех | Доступ: платный
Лекция 11:

Атрибуты и функции работы с контекстом (приложение)

< Лекция 10 || Лекция 11 || Лекция 12 >
Аннотация: На данной лекции приводится схематичное описание контекста GDI в Windows API. Вы познакомитесь с тем, какие вообще бывают способы вывода и оформление в Microsoft Windows, создаваемые средствами его API. Данная лекция носит обзорный характер, поэтому вопросы по тексту и глоссарий к ней не предусмотрены.

11.1. Атрибуты и функции работы с контекстом

В документации, которая поставляется в составе Microsoft SDK, описаны 20 атрибутов контекста отображения. Когда приложение получает контекст отображения или создаёт контекст устройства, все атрибуты имеют значения, принятые по-умолчанию. Для изменения этих значений по-умолчанию необходимо вызвать контекст отображения, и уже в нём изменить параметры. Описание атрибутов контекста и их значения по-умолчанию описаны ниже.

1.

АТРИБУТ: Цвет фона
ДОПУСТИМЫЕ ЗНАЧЕНИЯ: Описание любого из поддерживаемых цветов;
ЗНАЧЕНИЕ ПО-УМОЛЧАНИЮ: Белый цвет ( White );
ОПИСАНИЕ: Цвет фона в контексте отображения является как бы "цветом бумаги", на котором рисуются изображения, и пишется текст;
ПРИМЕЧАНИЕ: Приложение может изменить текст фона, вызвав функцию SetBkColor.

2.

АТРИБУТ: Режим фона
ДОПУСТИМЫЕ ЗНАЧЕНИЯ: "Непрозрачный"( OPAQUE ) и "Прозрачный" ( TRANSPARENT );
ЗНАЧЕНИЕ ПО-УМОЛЧАНИЮ: "Непрозрачный" ( OPAQUE );
ОПИСАНИЕ: Определяет режим вывода текста и графики поверх цвета фона окна;
ПРИМЕЧАНИЕ: Например, необходимо вывести в окно, с установленным синим фоном, текст чёрного цвета. В этом случае при выводе в режиме "непрозрачный" Вы увидите чёрные буквы внутри горизонтальной полосы белого цвета, а при рисовании прерывистой линии в промежутках между её штрихами будет не синий, а белый цвет. В режиме "Прозрачный" информация выводится без этих артефактов - "чёрный текст на синем фоне" и т.п. При этом аналогия с выводом на "цветную бумагу" текста и графики будет полная;
ПРИМЕЧАНИЕ: Приложение может изменить режим вывода текста функцией SetBkMode.

3.

АТРИБУТ: Режим рисования.
ЗНАЧЕНИЕ ПО-УМОЛЧАНИЮ: Цвет рисования копируется из цвета инструмента для рисования;
ОПИСАНИЕ: Режим рисования может задавать не только "нормальной" рисование, но также рисование инвертированными цветами и рисование с помощью маски "ИСКЛЮЧАЮЩЕЕ ИЛИ";
ПРИМЕЧАНИЕ: Изменение этого режима рисования может потребоваться только в том случае, если необходимо видеть текст при любом фоне окна. Поэтому менять этот режим часто не нужно - программист может сам регулировать цвет фона окна;
ПРИМЕЧАНИЕ: Для выбора режима рисования приложение должно использовать функцию SetROP2.

4.

АТРИБУТ: Цвет текста
ДОПУСТИМЫЕ ЗНАЧЕНИЯ: Любой из поддерживаемых цветов;
ЗНАЧЕНИЯ ПО-УМОЛЧАНИЮ: Чёрный цвет ( Black );
ОПИСАНИЕ: Цвет, которым отображается текст при выводе, например, функциями TextOut и DrawText ;
ПРИМЕЧАНИЕ: Для выбора цвета текста приложение должно использовать функцию SetTextColor ;

5.

АТРИБУТ: Шрифт
ДОПУСТИМЫЕ ЗНАЧЕНИЯ: Один из шрифтов, установленных в операционной системе Microsoft Windows;
ЗНАЧЕНИЕ ПО-УМОЛЧАНИЮ: Системный шрифт, с переменной шириной литер, без засечек, в кодировке ANSI (в операционной системе обозначается как SYSTEM_FONT );
ПРИМЕЧАНИЕ: С помощью функций CreateFont, CreateFontInderect и SelectObject приложение Microsoft Windows может выбрать для вывода текста любой другой шрифт, установленный (зарегистрированный) в операционной системе.

6.

АТРИБУТ: Межбуквенный промежуток (трекинг)
ДОПУСТИМОЕ ЗНАЧЕНИЕ: любое положительное;
ЗНАЧЕНИЕ ПО-УМОЛЧАНИЮ: 0 (расстояние между символами определяется разработчиком шрифта);
ОПИСАНИЕ: Межлитерный интервал задаётся разработчиком шрифта и "зашит" в его метриках;
ПРИМЕЧАНИЕ: Большее расстояние между литерами можно задать с помощью функции SetTextCharacterExtra.

7.

АТРИБУТ: Цветовая палитра
ДОПУСТИМЫЕ ЗНАЧЕНИЯ: В палитре можно задать 236 цветов, плюс 20 цветов зарезервировано системой;
ЗНАЧЕНИЕ ПО-УМОЛЧАНИЮ: Определяется видеокартой, либо системная палитра;
ОПИСАНИЕ: Палитра состоит из цветов, выбранных из всего "цветового пространства монитора" (т.е. из тех цветов, которые он может отображать), которыми "рисуются" все другие элементы. Палитры используются только для вывода изображений на монитор;
ПРИМЕЧАНИЕ: Для работы с палитрами в составе программного интерфейса имеются следующие функции: CreatePallette, SelectPalette, RealizePalette, UnrealizeObject.

8.

АТРИБУТ: Кисть
ДОПУСТИМЫЕ ЗНАЧЕНИЯ: "Жёсткие" ( Solid ) кисти, состоящие из одного цвета, или битовые изображения (8х8 пикселей);
ЗНАЧЕНИЕ ПО-УМОЛЧАНИЮ: "Жёсткая" кисть белого цвета;
ОПИСАНИЕ: Кисть используется для закрашивания внутренней области окна приложения или замкнутой геометрической фигуры;
ПРИМЕЧАНИЕ: Функции для создания и выбора кисти: CreateSolidBrush, CreateHatchBrush, SelectObject, CreatePatternBrush, CreateDIBPatternBrush, CreateBrushInderect.

9.

АТРИБУТ: Начальные координаты кисти
ДОПУСТИМОЕ ЗНАЧЕНИЕ: Координаты начала рисунка от (0,0) до (8,8);
ЗНАЧЕНИЯ ПО-УМОЛЧАНИЮ: Координата (0,0);
ОПИСАНИЕ: Начальные координаты кисти ( brush origin ) используется для определения координат точки внутри кисти, которая будет служить начальной точкой при закраске внутренней области фигуры или окна;
ПРИМЕЧАНИЕ: Менять значения по-умолчанию имеет смысл только для "мягких" ("растровых") кистей;
ПРИМЕЧАНИЕ: Приложение может изменить начальные координаты кисти при помощи функций SetBrushOrg и UnrealizeObject.

10.

АТРИБУТ: Режим закрашивания многоугольников
ДОПУСТИМЫЕ ЗНАЧЕНИЯ: "альтернативный" ( ALTERNATE ) и "режим заполнения" ( WINDING );
ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ: ALTERNATE ;
ОПИСАНИЕ: Эти атрибуты задают режимы закрашивания внутренних областей самопересекающихся многоугольников. В режиме "заполнения" область самопересечений закрашивается. В "альтернативном" режиме закрашиваются только области между нечётными и чётными сторонами многоугольника, в результате чего область пересечения может оказаться либо закрашенной, либо нет;
ПРИМЕЧАНИЕ: Для изменения режима закрашивания многоугольников предназначена функция SetPolyFillMode.

11.

АТРИБУТ: Перо
ДОПУСТИМЫЕ ЗНАЧЕНИЯ: Допустимы перья разной толщины, цвета и стиля. Среди доступных стилей присутствуют следующие стили: сплошной, пунктирный, штриховой, штрихпунктирный и стиль линии, в которой на одну черту приходится по две точки. Ширину можно изменять только у сплошной линии;
ЗНАЧЕНИЕ ПО-УМОЛЧАНИЮ: Сплошное перо чёрного цвета толщиной 1 символ;
ОПИСАНИЕ: Для того чтобы нарисовать линию или геометрическую фигуру, приложение Windows должно создать собственное перо (pen) или воспользоваться пером, выбранным в контексте отображения по-умолчанию. Можно создать новое перо, изменив его ширину, цвет или стиль;
ПРИМЕЧАНИЕ: Для работы с перьями приложение Windows должно использовать функции CreatePen, CreatePenInderect, SelectObject.

12.

АТРИБУТ: Текущая позиция пера
ДОПУСТИМЫЕ ЗНАЧЕНИЯ: Любое;
ЗНАЧЕНИЕ ПО-УМОЛЧАНИЮ: Начало координат (0,0);
ОПИСАНИЕ: Текущая позиция пера используется только для рисования линий (например, функцией LineTo );
ПРИМЕЧАНИЕ: Для установки текущей позиции пера предназначена функция MoveTo.

13.

АТРИБУТ: Изображение bitmap
ДОПУСТИМЫЕ ЗНАЧЕНИЯ: Любые изображения в формате Windows Bitmap (.BMP);
ЗНАЧЕНИЕ ПО-УМОЛЧАНИЮ: Нет изображения;
ОПИСАНИЕ: В контекст отображения можно выбрать изображение bitmap и затем отобразить его в окне, или использовать в меню;
ПРИМЕЧАНИЕ: Приложения Windows широко используют изображения, так как они очень удобны для отображения небольших пиктограмм, или больших и сложных многоцветных рисунков, получаемых со сканера или из графических редакторов;
ПРИМЕЧАНИЕ: Для загрузки или создания битовых изображений применяются функции SelectObject, CreateBitmapInderect, CreateCompatibleBitmap, CreateBitmap.

14.

АТРИБУТ: Режим растяжения.
ДОПУСТИМЫЕ ЗНАЧЕНИЯ: BLACKONWHITE, WHITEONBLACK, COLORONCOLOR и др.;
ЗНАЧЕНИЕ ПО-УМОЛЧАНИЮ: BLACKONWHITE ;
ОПИСАНИЕ: Приложение Windows может копировать прямоугольные участки изображений bitmap, выполняя при этом масштабирование, то есть сжатие или растяжение. При этом приоритет цветов при растяжении определяется данным режимом. В режиме по-умолчанию два или большее количество соседних пикселей преобразуются в один пиксель с помощью логической операции ИЛИ. В результате такого преобразования получается чёрный пиксель, если в исходном изображении любой пиксель из преобразуемой группы имеет чёрный цвет;
ПРИМЕЧАНИЕ: Для растяжения bitmap используется функция StretchBlt, а для изменения режима растяжения используется функция SetStretchBltMode.

15.

АТРИБУТ: Область ограничения.
ДОПУСТИМОЕ ЗНАЧЕНИЕ: Любое;
ЗНАЧЕНИЕ ПО-УМОЛЧАНИЮ: Внутренняя область окна ( client region );
ОПИСАНИЕ: Приложение может создавать область ограничения вывода сложной, практически произвольной, формы, исключая из неё или включая в неё области в виде многоугольников или эллипсов. Это позволяет получить при отображении интересные эффекты, труднодостижимые без использования областей ограничения (правда, ценой снижения скорости вывода изображения);
ПРИМЕЧАНИЕ: Для работы с областями предназначены функции: CreateEllipticRgn, CreateEllipticRgnIndirect, CreateRectRgn, CreatePolygonRgn, CreatePolyPolygonRgn, CreateRoundRectRgn, ExcludeClipRgn, IntersectClipRgn, OffsetCpRgn, SelectClipRgn.

16.

АТРИБУТ: Режим отображения.
ДОПУСТИМОЕ ЗНАЧЕНИЕ: Одно из следующих: MM_TEXT, MM_LOMETRIC, MM_HIMETRIC, MM_LOENGLISH, MM_HIENGLISH, MM_TWIPS, MM_ISOTROPIC, MM_ANISOTROPUC ;
ПРИМЕЧАНИЕ: Первые шесть значений режимов используются для текста, последние два - для графики;
ЗНАЧЕНИЕ ПО-УМОЛЧАНИЮ: MM_TEXT ;
ПРИМЕЧАНИЕ: В Microsoft Windows NT можно использовать большее количество систем координат, в том числе и с наклонным расположением осей;
ОПИСАНИЕ: Режим отображения влияет на систему координат. Устанавливая различные режимы отображения, приложение может изменять направление и масштаб координатных осей. Для режима по-умолчанию начало системы координат находится в верхнем левом углу внутренней области окна, ось X направлена вправо, а ось Y - вниз. В качестве единицы измерения используется пиксель. Такой режим отображения удобен для вывода текста (мы читаем слева направо сверху вниз);
ПРИМЕЧАНИЕ: Для изменения режима отображения необходимо вызвать функцию SetMapMode.

17.

АТРИБУТ: Начало системы координат для окна
ДОПУСТИМЫЕ ЗНАЧЕНИЯ: В зависимости от режима отображения и размеров окна;
ЗНАЧЕНИЕ ПО-УМОЛЧАНИЮ: Точка с координатами (0,0);
ОПИСАНИЕ: В контексте отображения храниться информация о расположении начала системы координат для окна и для физического устройства. Эта информация используется GDI для выполнения операций преобразования логических координат в физические координаты;
ПРИМЕЧАНИЕ: Для перемещения начала системы координат окна можно использовать функцию SetWindowOrg.

18.

АТРИБУТ: Начало системы физических координат
ДОПУСТИМОЕ ЗНАЧЕНИЕ: Определяется физическим устройством (экраном дисплея, принтером и т.п.);
ЗНАЧЕНИЕ ПО-УМОЛЧАНИЮ: Точка с координатами (0,0);
ОПИСАНИЕ: Начало системы физических координат относится не к окну приложения, а к физическому устройству вывода (например, ко всему экрану монитора, к листу бумаги и т.п.);
ПРИМЕЧАНИЕ: Для перемещения начала системы координат окна можно использовать функцию SetViewportOrg.

19.

АТРИБУТ: Масштаб осей для окна
ЗНАЧЕНИЕ ПО-УМОЛЧАНИЮ: 1:1;
ОПИСАНИЕ: Для некоторых режимов отображения приложение может изменять масштаб осей в окне, устанавливая его новое значение в контексте отображения;
ПРИМЕЧАНИЕ: Приложение может изменить масштаб осей для окна, вызвав функцию SetWindowExt.

20.

АТРИБУТ: Масштаб осей физических координат
ЗНАЧЕНИЕ ПО-УМОЛЧАНИЮ: 1:1;
ОПИСАНИЕ: Контекст изображения содержит масштаб осей для физического устройства, который вместе с масштабом осей в окне используется для преобразования координат;
ПРИМЕЧАНИЕ: Приложение может изменить масштаб осей для физических координат, вызвав функцию SetViewportExt.

11.2. Резюме функций

На данной лекции Вы познакомились с основными атрибутами и функциями контекста отображения в Microsoft Windows. Поскольку большинство его функций и атрибутов относятся к графике и мало влияют на отображение текста, то описание функций в этой лекции было опущено. Для более подробного описания функций графического контекста смотри, например, учебники [35]. Функции же работы с графическим контекстом для текстового вывода смотрите в следующей лекции.

11.3. Приложение №I. Определение цвета в контексте вывода

Для представления цвета в Windows используется специальная структура: COLORREF, определённая в файле <windows.h>:

typedef DWORD COLORREF;

Как видно из определения, эта структура описывает цвет в 32-х битном представлении (однако эффективный размер цифрового канала - 8 бит). Всё это поле разделено на три канала: красный (r), зелёный (g) и синий (b). Для того, чтобы задать цвет при помощи этих трёх каналов, необходимо использовать макрокоманду "RGB", например:

BYTE r = 0;
BYTE g = 0;
BYTE b = 255;
COLORREF = clrref;
// Задаём интенсивный синий цвет
clrref = RGB( r, g, b );

Примечание: тип каждого канала должен иметь тип BYTE (или unsigned char ) и находиться в пределах от 0 (отсутствие цвета в канале) до 255 (максимальная интенсивность цвета в канале).

Замечание: как указывалось в тексте лекций ранее, цвет на устройстве может отличаться от цвета, заданного в структуре COLORREF. Если устройство не может нарисовать все цвета из указанной RGB модели, драйвер устройства выберет только те цвета, которые он может отобразить, и подогноать под них другие цвета. Так что указанный в структуре цвет - это скорее "желаемый", "ожидаемый" цвет, но не реально отображаемый.

Для выделения каждой составляющей (канала) из типа данных: COLORREF, используются следующие три макро функции:

  • BYTE GetRValue( COLORREF rgb )
    - для вывода красного канала цвета;
  • BYTE GetGValue( COLORREF rgb )
    - для вывода зелёного канала цвета;
  • BYTE GetBValue( COLORREF rgb )
    - для вывода синего канала цвета;

Итак, только что Вы ознакомились с основными правилами задания цвета в Windows, используя RGB модель цвета. Для вывода текста этих знаний хватит для Вас с избытком.

< Лекция 10 || Лекция 11 || Лекция 12 >
Artem Bardakov
Artem Bardakov
Россия
Андрей Алабин
Андрей Алабин
Россия