Поделиться через


Класс CPen

Замечание

Библиотека классов Microsoft Foundation (MFC) продолжает поддерживаться. Однако мы больше не добавляем функции или обновляем документацию.

Инкапсулирует перо интерфейса графических устройств 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см. в разделе "Графические объекты".

Иерархия наследования

CObject

CGdiObject

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функции элементов , , RectangleRoundRectи PieChordт. д.). Если этот стиль используется с выходными функциями 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, ширина будет указана в логических единицах. В противном nPenStylePS_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 объект с CreatePenCreatePenIndirectпомощью функций-членов или 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, ширина указана в логических единицах. В противном nPenStylePS_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_SOLIDPS_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_SOLIDPS_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;

См. также

CGdiObject Класс
Диаграмма иерархии
CBrush Класс