HPEN CreatePen(int fnPenStyle. int nWidth. COLORREF crColor)
При этом в памяти выделяется место для хранения структуры типа tagLOGPEN, объявление которой приведено в листинге 11.1.
Листинг 11.1
typedef struct tagLOGPEN
{
UINT lopnStyle: // Стиль линии POINT lopnWidth; // Толщина линии COLORREF lopnColor: // Цвет линии } LOGPEN; Создание элементов контекста Параметр fnPenStyle задает тип и стиль линии для заполнения первых двух полей структуры. Тип может принимать значения PS_COSMETIC и PS_GEOMETRIC.
Предопределенные значения стиля линии приведены в следующем списке: О PS_DASH - штриховая линия; О PS_D0T - пунктирная линия; О PS_DASHDOT - штрихпунктирная линия; О PS_DASHD0TD0T - линия, состоящая из блоков, в которые входят штрих и две последующие точки; О PSJJULL - невидимая линия; О PS_S0LID - сплошная линия; О PS_INSIDEFRAME - толстая линия, которая находится внутри фигуры. В этом случае контур фигуры совпадает не с серединой линии, а с ее внешним краем. Естественно, этот стиль может применяться только для линий толщиной больше единицы.
Тип и стиль при задании параметра можно объединять при помощи побитной операции ИЛИ.
Первые пять вариантов стиля могут объединяться только с типом PS_COSMETIC, а последний стиль можно объединять с PSGEOMETRIC. В файле WINGDI.H можно найти следующее определение:
#define PS_COSMETIC 0x00000000
Это определение показывает, что при создании пера можно не указывать никакого типа. В этом случае будет создано косметическое перо.
Параметр nWi dth задает толщину линии в логических единицах. Если она равна нулю, то формируется линия толщиной в один пиксел. Если толщина линии отличается от 1, то можно применять только стили PS_NULL, PS_S0LID или PSJNSIDEFRAME.
Параметр crCol or содержит трехбайтовый код цвета, в котором три байта задают интенсивности красного, зеленого и синего компонентов цвета. Для задания цвета удобно применять следующий макрос:
#define RGB(r.g.b) \
(C0L0REF)(( (BYTE)(r) | ((WORD)((BYTE)(g) )«8)) | (((DWORD)(BYTE)(b))«16)))