Шрифт:
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.