Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
WinAPI.docx
Скачиваний:
49
Добавлен:
16.12.2018
Размер:
3.43 Mб
Скачать

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

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

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));

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

4.5.1 Функция 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.

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