Класс CPen
Инкапсулирует перо интерфейса графических устройств Windows (GDI).
Синтаксис
class CPen : public CGdiObject
Участники
Открытые конструкторы
Имя | Описание |
---|---|
CPen::CPen |
Формирует объект CPen . |
Открытые методы
Имя | Описание |
---|---|
CPen::CreatePen |
Создает логическую косметику или геометрическое перо с указанным стилем, шириной и атрибутами кисти и присоединяет его к объекту CPen . |
CPen::CreatePenIndirect |
Создает перо со стилем, шириной и цветом LOGPEN , заданным в структуре, и присоединяет его к объекту CPen . |
CPen::FromHandle |
Возвращает указатель на CPen объект при указании Windows HPEN. |
CPen::GetExtLogPen |
Возвращает базовую структуру EXTLOGPEN . |
CPen::GetLogPen |
Возвращает базовую структуру LOGPEN . |
Открытые операторы
Имя | Описание |
---|---|
CPen::operator HPEN |
Возвращает дескриптор Windows, подключенный к объекту CPen . |
Замечания
Дополнительные сведения об использовании CPen
см. в разделе "Графические объекты".
Иерархия наследования
CPen
Требования
Заголовок: afxwin.h
CPen::CPen
Формирует объект CPen
.
CPen();
CPen(
int nPenStyle,
int nWidth,
COLORREF crColor);
CPen(
int nPenStyle,
int nWidth,
const LOGBRUSH* pLogBrush,
int nStyleCount = 0,
const DWORD* lpStyle = NULL);
Параметры
nPenStyle
Задает стиль пера. Этот параметр в первой версии конструктора может быть одним из следующих значений:
PS_SOLID
Создает сплошное перо.PS_DASH
Создает дефисное перо. Допустимо только в том случае, если ширина пера составляет 1 или меньше, в единицах устройства.PS_DOT
Создает пунктирное перо. Допустимо только в том случае, если ширина пера составляет 1 или меньше, в единицах устройства.PS_DASHDOT
Создает перо с чередующимися тире и точками. Допустимо только в том случае, если ширина пера составляет 1 или меньше, в единицах устройства.PS_DASHDOTDOT
Создает перо с чередующимися дефисами и двойными точками. Допустимо только в том случае, если ширина пера составляет 1 или меньше, в единицах устройства.PS_NULL
Создает пустое перо.PS_INSIDEFRAME
Создает перо, которое рисует линию внутри кадра закрытых фигур, созданных выходными функциями Windows GDI, которые указывают ограничивающий прямоугольник (например,Ellipse
функции элементов , ,Rectangle
RoundRect
иChord
Pie
т. д.). Если этот стиль используется с выходными функциями Windows GDI, которые не указывают ограничивающий прямоугольник (например,LineTo
функция-член), область рисования пера не ограничивается кадром.
Вторая версия конструктора задает сочетание типов, стиля, конечной CPen
крышки и атрибутов соединения. Значения из каждой категории должны объединяться с помощью побитового оператора "или" (|
). Тип пера может быть одним из следующих значений:
PS_GEOMETRIC
Создает геометрическое перо.PS_COSMETIC
Создает косметический перо.Вторая версия конструктора
CPen
добавляет следующие стили пера дляnPenStyle
:PS_ALTERNATE
Создает перо, которое задает каждый другой пиксель. (Этот стиль применим только для косметических перьев.)PS_USERSTYLE
Создает перо, использующее массив стилизации, предоставленный пользователем.Конечное ограничение может быть одним из следующих значений:
PS_ENDCAP_ROUND
Конечные крышки округляются.PS_ENDCAP_SQUARE
Конечные крышки являются квадратными.PS_ENDCAP_FLAT
Конечные крышки плоские.Соединение может быть одним из следующих значений:
PS_JOIN_BEVEL
Соединения разложены.PS_JOIN_MITER
Соединения митерируются, когда они находятся в пределах текущего ограничения, заданногоSetMiterLimit
функцией. Если соединение превышает это ограничение, оно выстроено.PS_JOIN_ROUND
Соединения округляются.
nWidth
Задает ширину пера.
Для первой версии конструктора значение 0 будет обрабатываться аналогично значению 1, за исключением того, что ширина не будет влиять на операции преобразования масштабирования, действующие для объекта графики, для которых используется перо; Ширина всегда будет иметь 1 пиксель.
Для второй версии конструктора, если
nPenStyle
естьPS_GEOMETRIC
, ширина будет указана в логических единицах. В противномnPenStyle
PS_COSMETIC
случае ширина должна иметь значение 1.
crColor
Содержит цвет RGB для пера.
pLogBrush
Указывает на структуру LOGBRUSH
. Если nPenStyle
есть PS_COSMETIC
, lbColor
элемент LOGBRUSH
структуры указывает цвет пера и lbStyle
элемент LOGBRUSH
структуры должен иметь значение BS_SOLID
. Если nPenStyle
есть PS_GEOMETRIC
, все элементы должны использоваться для указания атрибутов кисти пера.
nStyleCount
Задает длину в единицах двойного слова массива lpStyle
. Это значение должно быть равно нулю, если nPenStyle
это не PS_USERSTYLE
так.
lpStyle
Указывает на массив значений doubleword. Первое значение указывает длину первого тире в пользовательском стиле, второе значение указывает длину первого пробела и т. д. Этот указатель должен быть NULL
, если nPenStyle
это не PS_USERSTYLE
так.
Замечания
Если конструктор используется без аргументов, необходимо инициализировать результирующий CPen
объект с CreatePen
CreatePenIndirect
помощью функций-членов или CreateStockObject
функций-членов.
Если вы используете конструктор, который принимает аргументы, то дальнейшая инициализация не требуется. Конструктор с аргументами может вызвать исключение, если возникают ошибки, в то время как конструктор без аргументов всегда будет выполнен успешно.
Пример
// Create a solid red pen of width 2.
CPen myPen1(PS_SOLID, 2, RGB(255, 0, 0));
// Create a geometric pen.
LOGBRUSH logBrush;
logBrush.lbStyle = BS_SOLID;
logBrush.lbColor = RGB(0, 255, 0);
CPen myPen2(PS_DOT | PS_GEOMETRIC | PS_ENDCAP_ROUND, 2, &logBrush);
CPen::CreatePen
Создает логическую косметику или геометрическое перо с указанным стилем, шириной и атрибутами кисти и присоединяет его к объекту CPen
.
BOOL CreatePen(
int nPenStyle,
int nWidth,
COLORREF crColor);
BOOL CreatePen(
int nPenStyle,
int nWidth,
const LOGBRUSH* pLogBrush,
int nStyleCount = 0,
const DWORD* lpStyle = NULL);
Параметры
nPenStyle
Задает стиль пера. Список возможных значений см nPenStyle
. в конструкторе CPen
.
nWidth
Задает ширину пера.
Для первой версии
CreatePen
значение 0 будет обрабатываться аналогично значению 1, за исключением того, что ширина не будет влиять на операции преобразования масштабирования, которые применяются для графического объекта, используемого пером; ширина всегда будет 1 пиксель.Для второй версии
CreatePen
, еслиnPenStyle
имеетсяPS_GEOMETRIC
, ширина указана в логических единицах. В противномnPenStyle
PS_COSMETIC
случае ширина должна иметь значение 1.
crColor
Содержит цвет RGB для пера.
pLogBrush
Указывает на структуру LOGBRUSH
. Если nPenStyle
есть PS_COSMETIC
, lbColor
элемент LOGBRUSH
структуры указывает цвет пера и lbStyle
элемент LOGBRUSH
структуры должен иметь значение BS_SOLID
. Если nPenStyle
есть PS_GEOMETRIC
, все элементы должны использоваться для указания атрибутов кисти пера.
nStyleCount
Задает длину в единицах двойного слова массива lpStyle
. Это значение должно быть равно нулю, если nPenStyle
это не PS_USERSTYLE
так.
lpStyle
Указывает на массив значений doubleword. Первое значение указывает длину первого тире в пользовательском стиле, второе значение указывает длину первого пробела и т. д. Этот указатель должен быть NULL
, если nPenStyle
это не PS_USERSTYLE
так.
Возвращаемое значение
Если метод выполнен успешно, или ноль, если метод завершается ошибкой.
Замечания
Первая версия инициализирует CreatePen
перо с указанным стилем, шириной и цветом. Затем перо можно выбрать в качестве текущего пера для любого контекста устройства.
Пера, имеющие ширину больше 1 пикселя, всегда должны иметь PS_NULL
либо стиль, PS_SOLID
PS_INSIDEFRAME
либо стиль.
Если перо имеет PS_INSIDEFRAME
стиль и цвет, который не соответствует цвету в логической таблице цветов, перо рисуется с тронутыми цветами. Стиль PS_SOLID
пера нельзя использовать для создания пера с тротым цветом. Стиль PS_INSIDEFRAME
идентичен PS_SOLID
, если ширина пера меньше или равна 1.
Вторая версия инициализирует CreatePen
логическую косметику или геометрическое перо, которое имеет указанный стиль, ширину и атрибуты кисти. Ширина косметического пера всегда равна 1; Ширина геометрического пера всегда указывается в единицах мира. После создания логического пера приложение может выбрать его в контекст устройства, вызвав функцию CDC::SelectObject
. После выбора пера в контексте устройства его можно использовать для рисования линий и кривых.
Если
nPenStyle
естьPS_COSMETIC
иPS_USERSTYLE
, записи в массивеlpStyle
указывают длину дефисов и пробелов в единицах стиля. Единица стиля определяется устройством, в котором перо используется для рисования линии.Если
nPenStyle
естьPS_GEOMETRIC
иPS_USERSTYLE
, записи в массивеlpStyle
указывают длину дефисов и пробелов в логических единицах.Если
nPenStyle
этоPS_ALTERNATE
так, единица стиля игнорируется и задается каждый другой пиксель.
Если приложению больше не требуется заданное перо, он должен вызывать CGdiObject::DeleteObject
функцию-член или уничтожать CPen
объект, чтобы ресурс больше не использовался. Приложение не должно удалять перо при выборе пера в контексте устройства.
Пример
CPen myPen1, myPen2;
// Create a solid red pen of width 2.
myPen1.CreatePen(PS_SOLID, 2, RGB(255, 0, 0));
// Create a geometric pen.
LOGBRUSH logBrush;
logBrush.lbStyle = BS_SOLID;
logBrush.lbColor = RGB(0, 255, 0);
myPen2.CreatePen(PS_DOT | PS_GEOMETRIC | PS_ENDCAP_ROUND, 2, &logBrush);
CPen::CreatePenIndirect
Инициализирует перо, которое имеет стиль, ширину и цвет, заданный в структуре, lpLogPen
на которую указывает.
BOOL CreatePenIndirect(LPLOGPEN lpLogPen);
Параметры
lpLogPen
Указывает на структуру Windows LOGPEN
, содержащую сведения о пере.
Возвращаемое значение
Ненулевое значение, если функция выполнена успешно; в противном случае — 0.
Замечания
Пера, имеющие ширину больше 1 пикселя, всегда должны иметь PS_NULL
либо стиль, PS_SOLID
PS_INSIDEFRAME
либо стиль.
Если перо имеет PS_INSIDEFRAME
стиль и цвет, который не соответствует цвету в логической таблице цветов, перо рисуется с тронутыми цветами. Стиль PS_INSIDEFRAME
идентичен PS_SOLID
, если ширина пера меньше или равна 1.
Пример
LOGPEN logpen;
CPen cMyPen;
// Get the LOGPEN of an existing pen.
penExisting.GetLogPen(&logpen);
// Change the color to red and the width to 2.
logpen.lopnWidth.x = 2;
logpen.lopnColor = RGB(255, 0, 0);
// Create my pen using the new settings.
cMyPen.CreatePenIndirect(&logpen);
CPen::FromHandle
Возвращает указатель на CPen
объект, заданный дескриптором пера Windows GDI.
static CPen* PASCAL FromHandle(HPEN hPen);
Параметры
hPen
HPEN
дескриптор пера GDI Для Windows.
Возвращаемое значение
Указатель на объект в случае успешного CPen
выполнения; в противном случае NULL
.
Замечания
CPen
Если объект не присоединен к дескриптору, создается и присоединяется временный CPen
объект. Этот временный объект действителен только в следующий раз, когда приложение имеет время простоя CPen
в цикле событий, в то время как все временные графические объекты удаляются. Другими словами, временный объект действителен только во время обработки одного сообщения окна.
Пример
// Convert an HPEN to a CPen*.
// NOTE: hPen is a valid pen handle.
CPen* pPen = CPen::FromHandle(hPen);
CPen::GetExtLogPen
Возвращает базовую структуру EXTLOGPEN
.
int GetExtLogPen(EXTLOGPEN* pLogPen);
Параметры
pLogPen
Указывает на структуру EXTLOGPEN
, содержащую сведения о пере.
Возвращаемое значение
Имеет ненулевое значение в случае успешного выполнения, иначе — 0.
Замечания
Структура EXTLOGPEN
определяет стиль, ширину и атрибуты кисти пера. Например, вызов GetExtLogPen
для сопоставления определенного стиля пера.
Дополнительные сведения об атрибутах пера см. в следующих разделах пакета SDK для Windows.
Пример
В следующем примере кода показано, как получить GetExtLogPen
атрибуты пера, а затем создать новый косметический перо с тем же цветом.
EXTLOGPEN extlogpen;
penExisting.GetExtLogPen(&extlogpen);
CPen penOther;
LOGBRUSH LogBrush = { extlogpen.elpBrushStyle, extlogpen.elpColor,
extlogpen.elpHatch };
penOther.CreatePen(PS_COSMETIC, 1, &LogBrush);
CPen::GetLogPen
Возвращает базовую структуру LOGPEN
.
int GetLogPen(LOGPEN* pLogPen);
Параметры
pLogPen
Указывает на LOGPEN
структуру, содержащую сведения о перо.
Возвращаемое значение
Имеет ненулевое значение в случае успешного выполнения, иначе — 0.
Замечания
Структура LOGPEN
определяет стиль, цвет и шаблон пера.
Например, вызов GetLogPen
для сопоставления определенного стиля пера.
Дополнительные сведения об атрибутах пера см. в следующих разделах пакета SDK для Windows.
Пример
В следующем примере кода показано, как получить GetLogPen
символ пера, а затем создать новое сплошное перо с одинаковым цветом.
LOGPEN logpen;
penExisting.GetLogPen(&logpen);
CPen penOther(PS_SOLID, 0, logpen.lopnColor);
CPen::operator HPEN
Возвращает присоединенный дескриптор CPen
GDI Windows объекта.
operator HPEN() const;
Возвращаемое значение
В случае успешного выполнения дескриптор объекта GDI Windows, представленного CPen
объектом; в противном случае NULL
.
Замечания
Этот оператор является оператором приведения, который поддерживает прямое использование HPEN
объекта.
Дополнительные сведения об использовании графических объектов см. в статье "Графические объекты " в пакете SDK для Windows.
Пример
// Create a solid red pen of width 2.
CPen myPen(PS_SOLID, 2, RGB(255, 0, 0));
// Get the handle of the pen object.
HPEN hPen = (HPEN)myPen;