Чтение онлайн

ЖАНРЫ

Шрифт:

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

...

hCurDC := GetDC(Handle);

Она получает описатель контекста устройства экрана для клиентской области указанного окна или всего экрана. Функция имеет следующий формат заголовка:

...

Function GetDC(hWnd: HWND): HDC;

Здесь hWnd – дескриптор окна, для

которого получается контекст устройства. Если это значение равно nil, то GetDC возвращает контекст устройства для всего экрана. В случае успешного выполнения функция возвращает контекст устройства. В противном случае ее результат равен nil.

Теперь мы должны изменить атрибуты контекста устройства по умолчанию на те, которые нам необходимы. Изменим цвет карандаша и его толщину, а также цвет кисти. Для этого создадим новый графический объект при помощи функции CreatePen.

...

hCurPen := CreatePen(PS_SOLID, 2, RGB(255, 64, 0));

Формат данной функции следующий:

...

Function CreatePen(fnPenStyle: Integer; nWidth: Integer; crColor: COLORREF): HPEN;

Параметр f nPenStyle задает стиль карандаша. Возможные значения этого параметра приведены в табл. 6.1.

Таблица 6.1

. Стили карандаша

Параметр nWidth задает ширину карандаша в логических единицах. EonnnWidth равен 0, то карандаш будет шириной в один пиксел независимо от текущей трансформации.

CreatePen возвращает карандаш с заданной шириной со стилем PSSOLID, если вы указали ширину больше, чем 1, для одного из стилей: PS_DASH, PS_DOT, PSJDASHDOT, PS_DASHDOTDOT.

Параметр crColor задает цвет карандаша.

Если функция завершилась удачно, то она возвращает дескриптор логического карандаша. В противном случае она возвращает nil.

После того как карандаш создан, следует его выбрать для полученного контекста при помощи функции SelectObject:

...

hOldPen:= SelectObject(hCurDC, hCurPen);

Данная функция имеет следующий формат:

...

Function SelectObject(hdc: HDC; hgdiobj: HGDIOBJ): HGDIOBJ;

• hdc – дескриптор контекста устройства;

• hgdiobj – дескриптор на выбираемый объект.

Если выбранный объект не регион и функция выполнилась успешно, то она возвращает дескриптор на объект, который был заменен. Если выбранный объект регион и функция выполнилась успешно, то возвращаемое значение может быть одним из приведенных в табл. 6.2.

Таблица 6.2.

Результат SelectObject для выбранного объекта регион

Если происходит ошибка и выбранный объект не регион, то возвращаемое значение – nil. Иначе – HGDI_ERROR.

Функция возвращает предыдущий выбранный объект указанного типа. Приложение должно всегда восстанавливать объект по умолчанию после того, как закончилось

рисование с использованием нового объекта.

Приложение не может выбрать битовый массив более чем для одного контекста устройства одновременно.

После успешного выбора созданного нами карандаша и запоминания предыдущего выбранного необходимо создать и выбрать кисть. Для этого используем функцию CreateSolidBrush:

...

hCurBrush:= CreateSolidBrush(RGB(0, 128, 255));

Данная функция имеет следующий формат:

...

Function CreateSolidBrush(crColor: COLORREF): HBRUSH;

Параметр crColor задает цвет кисти.

Если функция завершилась успешно, то она возвращает дескриптор логической кисти. В противном случае – nil.

После создания кисти выбираем ее с использованием той же самой функции SelectObj ect и запоминаем ранее выбранную.

...

hOldBrush:= SelectObject(hCurDC, hCurBrush);

Далее рисуем примитивы с использованием полученного контекста устройства с новыми графическими объектами.

Чтобы нарисовать эллипс, используем функцию Ellipse:

...

Ellipse(hCurDC, 10, 10, 100, 70);

Функция имеет следующий формат:

...

Function Ellipse(hdc: HDC; nLeftRect, nTopLeft, nRightRect, nBottomRect: Integer): BOOL;

• hdc – дескриптор контекста устройства;

• nLeftRect – задает координату х (в логических единицах) верхнего левого угла описываемого прямоугольника;

• nTopRect – задает координату у (в логических единицах) верхнего левого угла;

• nRightRect – задает координату х (в логических единицах) правого нижнего угла;

• nBottomRect – задает координату у (в логических единицах) правого нижнего угла.

Если функция завершается успешно, то ее результат – ненулевое значение. В противном случае возвращается 0.

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

...

Rectangle(hCurDC, 110, 10, 210, 70);

У данной функции такой же формат, как и у Ellipse, но интерпретация последних четырех параметров немного иная. Они задают сам прямоугольник, а не прямоугольник, описываемый вокруг эллипса.

Далее мы рисуем прямоугольник с округленными углами при помощи функции RoundRect.

...

RoundRect(hCurDC, 10, 80, 100, 140, 10, 10);

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

Следующим примитивом, который мы рисуем, является отрезок. Процесс рисования осуществляется в два этапа. Сначала при помощи функции MoveToEx устанавливается начальная точка отрезка. Затем используем функцию Move То с указанием конечной точки.

Поделиться с друзьями: