Функции рисования замкнутых фигур

Функции рисования замкнутых фигур строят закрашенные или незакрашенные фигуры, такие, как прямоугольники, эллипсы, многоугольники с прямыми и скругленными углами и т. д. Для закрашивания внутренней области замкнутых фигур используют кисть контекста отображения. Внешний контур фигуры обводят пером контекста отображения. Учитывают и остальные атрибуты отображения. В зависимости от стиля пера граница фигуры может находиться полностью внутри заданного внешнего контура или выходить за его пределы. Если выбрать стиль пера PS_NULL, контур станет невидимым.

Для рисования прямоугольника вызывают функцию Rectangle:

BOOL Rectangle(HDC hdc, int l, int t, int r, int b);

Параметры l, t, r и b определяют логические координаты соответственно левого, верхнего, правого и нижнего краев прямоугольника. В случае успешного выполнения функция возвращает ненулевое значение. Функция игнорирует текущую позицию.

Функция RoundRect рисует прямоугольник с закругленными углами:

BOOL RoundRect(HDC hdc, int l, int t, int r, int b, int w, int h);

Первые 5 параметров этой функции совпадают с параметрами функции Rectangle. А параметры w и h задают соответственно ширину и высоту эллипса, дуги которого закругляют углы прямоугольника. В случае успешного выполнения функция возвращает ненулевое значение. Функция игнорирует текущую позицию.

Функция FillRect закрашивает прямоугольную область окна заданной кистью:

int FillRect(HDC hdc, CONST RECT lprc, HBRUSH hbr);

Параметр lprc указывает на закрашиваемый прямоугольник. Параметр hbr идентифицирует кисть закрашивания, может быть дескриптором логической кисти или значением системного цвета. Например:

FillRect(hdc, &rect, (HBRUSH)(COLOR_WINDOW+1));

Правая и нижняя границы прямоугольника не закрашиваются. В случае успешного выполнения функция возвращает ненулевое значение. Функция игнорирует текущую позицию.

Функция FrameRect рисует прямоугольную рамку:

int FrameRect(HDC hdc, CONST RECT lprc, HBRUSH hbr);

Параметры этой функции подобны параметрам функции FillRect. Функция FrameRect кистью hbr рисует рамку вокруг заданного прямоугольника. Ширина пера, используемого для рисования рамки, всегда равна одной логической единице. В случае успешного выполнения функция возвращает ненулевое значение. Функция игнорирует текущую позицию.

Функция InvertRect инвертирует значения цветов точек заданной прямоугольной области lprc:

BOOL InvertRect (HDC hdc, CONST RECT lprc);

В случае успешного выполнения функция возвращает ненулевое значение. Для восстановления цветов еще раз вызывают эту функцию.

Следующая функция пунктиром обозначает границы заданной прямоугольной области lprc:

BOOL DrawFocusRect(HDC hdc, CONST RECT lprc);

Пунктирные линии строятся с использованием растровой операции ИСКЛЮЧАЮЩЕЕ ИЛИ цветов точек, лежащих на границе прямоугольника. Вызывая эту функцию второй раз, можно удалить выделение прямоугольника. При прокрутке содержимого окна выделенная граница остается на месте. Для этой функции не нужно выбирать перо, рисующее пунктирную линию. Перед вызовом функции DrawFocusRect устанавливают режим отображения ММ_ТЕХТ.

Для рисования эллипса используют функцию Ellipse:

BOOL Ellipse(HDC hdc, int l, int t, int r, int b);

Параметры функции Ellipse идентичны первым пяти параметрам функции Arc. В случае успешного выполнения функция возвращает ненулевое значение. Функция игнорирует текущую позицию.

Сегмент эллипса рисуют при помощи функции Chord:

BOOL Chord(HDC hdc, int l, int t, int r, int b,

int x0, int y0, int x, int у);

Параметры этой функции аналогичны параметрам функции Arc.

В отличие от функции Arc, функция Chord соединяет хордой точки начала и конца дуги эллипса и закрашивает выделенный таким образом сегмент текущей кистью. В случае успешного выполнения функция возвращает ненулевое значение. Функция игнорирует текущую позицию.

Для рисования сектора эллипса используют функцию Pie:

BOOL Pie(HDC hdc, int l, int t, int r, int b,

int x0, int y0, int x, int у);

Параметры этой функции аналогичны параметрам функций Arc и Chord. В отличие от функции Chord, функция Pie соединяет точки начала и конца дуги с центром эллипса и закрашивает выделенный таким образом сектор текущей кистью. В случае успешного выполнения функция возвращает ненулевое значение. Функция игнорирует текущую позицию.

Функция Polygon рисует многоугольник:

BOOL Polygon(HDC hdc, CONST POINT lpPoints, int nCount);

Параметр lpPoints указывает на массив структур POINT, в котором находятся координаты вершин многоугольника. Параметр nCount равен размеру этого массива. В массиве каждая вершина должна быть указана только один раз. Функция Polygon автоматически соединяет первую и последнюю вершины многоугольника. В случае успешного выполнения функция возвращает ненулевое значение. Функция игнорирует текущую позицию.

Контрольные вопросы

1. Каковы особенности вывода в окно?

2. Из каких основных шагов состоит обработка сообщения WM_PAINT?

3. Какими способами выводят в окно при обработке любых сообщений?

4. Какие виды контекста отображения существуют и чем они отличаются?

5. Перечислите основные атрибуты рисования контекста отображения.

6. Из каких шагов состоит процедура выбора нового шрифта в контекст отображения и его удаление?

7. Какие функции используют при рисовании точек?

8. Какие функции рисования линий существуют?

9. Как закрашивают замкнутые фигуры?


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: