Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ch-04_2.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
624.64 Кб
Скачать

Рисование закрашенных областей

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

Функция

Фигура

Rectangle

Прямоугольник

Ellipse

Эллипс

RoundRect

Прямоугольник со скругленными углами

Chord

Дуга кривой эллипса, концы которой соединены хордой

Pie

Кусок, вырезанный из эллипса

Polygon

Многоугольник

PolyPolygon

Множество многоугольников

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

Фигура закрашивается текущей кистью, выбранной в контексте устройства. По умолчанию, это стандартная кисть WHITE_BRUSH. Следовательно, внутренняя область фигуры будет закрашена белым цветом. Windows имеет шесть стандартных (stock) кистей: WHITE_BRUSH (белая кисть), LTGRAY_BRUSH (светло-серая кисть), GRAY_BRUSH (серая кисть), DKGRAY_BRUSH (темно-серая кисть), BLACK_BRUSH (черная кисть) и NULL_BRUSH или HOLLOW_BRUSH (пустая кисть).

Вы можете выбрать одну из стандартных кистей в контекст устройства точно также, как и стандартное перо. Windows определяет HBRUSH как описатель кисти, поэтому вам следует сначала определить переменную типа описателя кисти:

HBRUSH hBrush;

Вы можете получить описатель кисти GRAY_BRUSH, вызвав GetStockObject :

hBrush = GetStockObject (GRAY_BRUSH);

Вы можете выбрать эту кисть в контекст устройства, вызвав SelectObject :

SelectObject (hdc, hBrush);

Теперь, когда вы рисуете одну из указанных фигур, их внутренняя область закрашивается серым.

Если вы хотите нарисовать фигуру без рамки, выберите перо NULL_PEN в контекст устройства:

SelectObject (hdc, GetStockObject (NULL_PEN));

Если вы хотите нарисовать только контур фигуры без закрашивания внутренней области, выберите кисть NULL_BRUSH в контекст устройства:

SelectObject (hdc, GetStockObject (NULL_BRUSH));

Вы можете также создать собственные кисти аналогично тому, как вы можете создать собственные перья. Скоро мы рассмотрим эту тему.

Функция Polygon и режим закрашивания многоугольника

Первые пять функций рисования многоугольников мы уже рассмотрели. Функция Polygon — шестая из функций рисования ограниченных и закрашенных фигур. Вызов этой функции очень похож на вызов функции Polyline:

Polygon (hdc, pt, iCount);

Параметр pt — это массив структур типа POINT, iCount — число точек. Если последняя точка в массиве не совпадает с первой, то Windows добавляет линию, соединяющую последнюю и первую точки. (Функция Polyline этого не делает.)

Windows закрашивает внутреннюю область фигуры текущей кистью, учитывая, какой из режимов закрашивания многоугольников установлен текущим в контексте устройства. По умолчанию режим закрашивания равен ALTERNATE (попеременный), означающий, что Windows закрашивает только те фрагменты внутренней области многоугольника, которые получаются путем соединения линий с нечетными номерами (1, 3, 5 и т. д.). Другие фрагменты внутренней области не закрашиваются. Вы можете установить режим закрашивания WINDING (сквозной), в котором Windows закрашивает все внутренние области. Вы устанавливаете режим закрашивания так:

SetPolyFillMode (hdc, iMode);

Для иллюстрации режимов закрашивания рассмотрим пример с пятиконечной звездой. На рис. 4.17 звезда, находящаяся слева, нарисована в режиме ALTERNATE, а звезда, находящаяся справа — в режиме WINDING.

Рис. 4.17. Фигуры, нарисованные в двух режимах закрашивания многоугольника: ALTERNATE (слева) и WINDING (справа)

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]