
- •Использование стандартных перьев
- •Создание, выбор и удаление перьев
- •Закрашивание пустот
- •Режимы рисования
- •Рисование закрашенных областей
- •Функция Polygon и режим закрашивания многоугольника
- •Закрашивание внутренней области
- •Режим отображения
- •Координаты устройства (физические координаты) и логические координаты
- •Системы координат устройства
- •Область вывода и окно
- •Работа в режиме mm_text
- •Метрические режимы отображения
- •Ваши собственные режимы отображения
- •Режим отображения mm_isotropic
- •Mm_anisotropic: растягивание изображения
- •Программа whatsize
- •Прямоугольники, регионы и отсечение
- •Работа с прямоугольниками
- •Случайные прямоугольники
- •Создание и рисование регионов
- •Отсечения: прямоугольники и регионы
- •Программа clover
- •Создание и воспроизведение путей
- •Расширенные перья
Рисование закрашенных областей
Давайте сделаем следующий шаг вперед от рисования линий к рисованию фигур. В 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 (справа)