Какой класс определяет перо рисующее контур фигуры
Перейти к содержимому

Какой класс определяет перо рисующее контур фигуры

  • автор:

Рисование фигур и контуров с помощью инструмента «Перо»

Инструмент «Перо» позволяет рисовать плавные контуры с опорными точками и ручками.

Инструмент «Перо» в Photoshop

Выберите инструмент «Перо» (P) .

На панели «Параметры» можно настроить параметры инструмента, такие как Режим рисования и Автоматическое добавление/удаление опорных точек, чтобы получить желаемый результат.

Нарисуйте контур с опорными точками и ручками.

  • Замкнутый контур: расположите инструмент над первой (пустой) опорной точкой и щелкните или перетащите мышь.
  • Незамкнутый контур: щелкните, удерживая клавишу «Ctrl» (Windows) или «Command» (Mac OS), в любом месте на достаточном расстоянии от любых объектов.

Pen Класс

Пространство имен: System.Drawing Сборка: System.Drawing.Common.dll Сборка: System.Drawing.dll Пакет: System.Drawing.Common v6.0.0 Пакет: System.Drawing.Common v7.0.0 Пакет: System.Drawing.Common v8.0.0

Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.

Определяет объект, используемый для рисования прямых линий и кривых. Этот класс не наследуется.

public ref class Pen sealed : MarshalByRefObject, ICloneable, IDisposable
public sealed class Pen : MarshalByRefObject, ICloneable, IDisposable
type Pen = class inherit MarshalByRefObject interface ICloneable interface IDisposable
Public NotInheritable Class Pen Inherits MarshalByRefObject Implements ICloneable, IDisposable

Наследование
Реализации

Примеры

В следующем примере кода демонстрируется создание Pen с помощью Brush и эффекты задания LineJoin свойства для Pen.

Этот пример предназначен для использования с Windows Forms. Вставьте код в форму и вызовите ShowLineJoin метод при обработке события формы Paint , передавая e как PaintEventArgs.

private: void ShowLineJoin( PaintEventArgs^ e ) < // Create a new pen. Pen^ skyBluePen = gcnew Pen( Brushes::DeepSkyBlue ); // Set the pen's width. skyBluePen->Width = 8.0F; // Set the LineJoin property. skyBluePen->LineJoin = System::Drawing::Drawing2D::LineJoin::Bevel; // Draw a rectangle. e->Graphics->DrawRectangle( skyBluePen, Rectangle(40,40,150,200) ); //Dispose of the pen. delete skyBluePen; > 
private void ShowLineJoin(PaintEventArgs e) < // Create a new pen. Pen skyBluePen = new Pen(Brushes.DeepSkyBlue); // Set the pen's width. skyBluePen.Width = 8.0F; // Set the LineJoin property. skyBluePen.LineJoin = System.Drawing.Drawing2D.LineJoin.Bevel; // Draw a rectangle. e.Graphics.DrawRectangle(skyBluePen, new Rectangle(40, 40, 150, 200)); //Dispose of the pen. skyBluePen.Dispose(); >
Private Sub ShowLineJoin(ByVal e As PaintEventArgs) ' Create a new pen. Dim skyBluePen As New Pen(Brushes.DeepSkyBlue) ' Set the pen's width. skyBluePen.Width = 8.0F ' Set the LineJoin property. skyBluePen.LineJoin = Drawing2D.LineJoin.Bevel ' Draw a rectangle. e.Graphics.DrawRectangle(skyBluePen, _ New Rectangle(40, 40, 150, 200)) 'Dispose of the pen. skyBluePen.Dispose() End Sub 

Комментарии

Рисует Pen линию указанной ширины и стиля. Используйте свойство для DashStyle рисования нескольких разновидностей пунктирных линий. Линия, нарисованная , Pen может быть заполнена различными стилями заливки, включая сплошные цвета и текстуры. Стиль заливки зависит от кисти или текстуры, используемой в качестве объекта заливки.

В .NET 6 и более поздних версиях пакет System.Drawing.Common, включающий этот тип, поддерживается только в операционных системах Windows. Использование этого типа в кроссплатформенных приложениях вызывает предупреждения во время компиляции и исключения во время выполнения. Дополнительные сведения см . в статье System.Drawing.Common, поддерживаемая только в Windows.

Конструкторы

Инициализирует новый экземпляр класса Pen указанным значением Brush.

Инициализирует новый экземпляр класса Pen с заданными свойствами Brush и Width.

Инициализирует новый экземпляр класса Pen указанным цветом.

Инициализирует новый экземпляр класса Pen указанными свойствами Color и Width.

Свойства

Возвращает или задает выравнивание для объекта Pen.

Возвращает или задает объект Brush, определяющий атрибуты объекта Pen.

Возвращает или задает цвет объекта Pen.

Возвращает или задает массив значений, определяющий составное перо. Составное перо рисует составную линию, состоящую из параллельных линий и промежутков.

Возвращает или задает настраиваемое завершение для использования в конце линий, нарисованных при помощи пера Pen.

Возвращает или задает настраиваемое завершение, используемое в начале линий, нарисованных при помощи пера Pen.

Возвращает или задает стиль завершения, ограничивающего пунктирные линии, нарисованные при помощи объекта Pen.

Возвращает или задает расстояние от начала линии до начала шаблона штриха.

Возвращает или задает массив настраиваемых штрихов и промежутков.

Возвращает или задает стиль, используемый для пунктирных линий, нарисованных при помощи объекта Pen.

Возвращает или задает стиль завершения линий, нарисованных при помощи объекта Pen.

Возвращает или задает объединенный стиль завершений для двух последовательных линий, нарисованных при помощи объекта Pen.

Возвращает или задает ограничение толщины соединения скошенных углов.

Возвращает или задает стиль линий, нарисованных с помощью объекта Pen.

Возвращает или задает стиль завершения, используемый в начале линий, рисуемых при помощи объекта Pen.

Возвращает или задает копию геометрического преобразования объекта Pen.

Возвращает или устанавливает ширину пера Pen, в единицах измерения объекта Graphics, используемого для рисования.

Методы

Создает точную копию данного объекта Pen.

Создает объект, который содержит всю необходимую информацию для создания прокси-сервера, используемого для взаимодействия с удаленным объектом.

Освобождает все ресурсы, используемые этим объектом Pen.

Определяет, равен ли указанный объект текущему объекту.

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

Служит хэш-функцией по умолчанию.

Является устаревшей.

Извлекает объект обслуживания во время существования, который управляет политикой времени существования данного экземпляра.

Возвращает объект Type для текущего экземпляра.

Является устаревшей.

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

Создает неполную копию текущего объекта Object.

Создает неполную копию текущего объекта MarshalByRefObject.

Умножает матрицу преобразования объекта Pen на заданный объект Matrix.

Умножает матрицу преобразования объекта Pen на заданный объект Matrix в заданном порядке.

Возвращает матрице геометрического преобразования объекта Pen единичное значение.

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

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

Выполняет изменение масштаба локального геометрического преобразования при помощи заданных коэффициентов. Этот метод вставляет изменение масштаба перед преобразованием.

Изменяет масштаб локального геометрического преобразования при помощи заданных коэффициентов в заданном порядке.

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

Возвращает строку, представляющую текущий объект.

Выполняет перевод локального геометрического преобразования на заданные размеры. Этот метод вставляет перевод перед преобразованием.

Выполняет перевод локального геометрического преобразования на заданные размеры в заданном порядке.

18.1 Рисование в форме

Графика необходима при организации пользовательского интерфейса. Образы информативнее текста. Framework .Net реализует расширенный графический интерфейс GDI+, обладающий широким набором возможностей. Но для рисования в формах достаточно иметь три объекта — перо, кисть и, хочется сказать, бумагу, но третий нужный объект — это объект класса Graphics, методы которого позволяют в формах заниматься графикой — рисовать и раскрашивать.

Класс Graphics — это основной класс, необходимый для рисования. Класс Graphics, так же, как и другие рассматриваемые здесь классы для перьев и кистей, находятся в пространстве имен Drawing, хотя классы некоторых кистей вложены в подпространство Drawing2D.

Объекты этого класса зависят от контекста устройства, (графика не обязательно отображается на дисплее компьютера, она может выводиться на принтер, графопостроитель или другие устройства), поэтому создание объектов класса Graphics выполняется не традиционным способом — без вызова конструктора класса. Создаются объекты специальными методами разных классов. Например, метод CreateGraphics класса Control — наследника класса Form — возвращает объект, ассоциированный с выводом графики на форму.

При рисовании в формах можно объявить в форме поле, описывающее объект класса Graphics:

а в конструкторе формы произвести связывание с реальным объектом:

Затем всюду в программе, где нужно работать с графикой, используется глобальный для формы объект graph и его методы. Есть другой способ получения этого объекта — обработчики некоторых событий получают объект класса Graphics среди передаваемых им аргументов. Например, в обработчике события Paint, занимающегося перерисовкой, этот объект можно получить так:

protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)

Graphics gr = e.Graphics;

//перерисовка, использующая методы объекта gr

Для получения этого объекта можно использовать и статические методы самого класса Graphics.

У класса Graphics большое число методов и свойств. Для рисования наиболее важны три группы методов. К первой относится перегруженный метод DrawString, позволяющий выводить тексты в графическом режиме. Вторую группу составляют методы Draw — DrawEllipse, DrawLine, DrawArc и другие, позволяющие цветным пером (объектом класса Pen) рисовать геометрические фигуры: линии, различные кривые, прямоугольники, многоугольники, эллипсы и прочее. К третьей группе относятся методы Fill — FillEllipse, FillPie, FillRectangle и другие, позволяющие нарисовать и закрасить фигуру кистью. Кисти (объекты классов, производных от Brush), могут быть разные — сплошные, узорные, градиентные.

Методам группы Draw класса Graphics, рисующим контур фигуры, нужно передать перо — объект класса Pen. В конструкторе этого класса можно задать цвет пера и его толщину (чаще говорят «ширину пера»). Цвет задается объектом класса (структурой) Color. Для выбора подходящего цвета можно использовать упоминавшееся выше диалоговое окно Color либо одно из многочисленных статических свойств класса Color, возвращающее требуемый цвет. Возможно и непосредственное задание элементов структуры в виде комбинации RGB — трех цветов — красного, зеленого и голубого. Вместо создания нового пера с помощью конструктора можно использовать специальный класс предопределенных системных перьев.

Класс Brush, задающий кисти, устроен более сложно. Класс Brush является абстрактным классом, так что создавать кисти этого класса нельзя, но можно создавать кисти классов-потомков Brush. Таких классов пять — они задают кисть:

  • SolidBrush — для сплошной закраски области заданным цветом;
  • TextureBrush — для закраски области заданной картинкой (image);
  • HatchBrush — для закраски области предопределенным узором;
  • LinearGradientBrush — для сплошной закраски с переходом от одного цвета к другому, где изменение оттенков задается линейным градиентом;
  • PathGradientBrush — для сплошной закраски с переходом от одного цвета к другому, где изменение оттенков задается более сложным путем.

Первые два класса кистей находятся в пространстве имен System.Drawing, остальные — в System.Drawing.Drawing2D. Создадим в нашем проекте новую форму RandomShapes, в которой будем рисовать и закрашивать геометрические фигуры трех разных типов — эллипсы, сектора, прямоугольники. Для каждого типа фигуры будем использовать свой тип кисти: эллипсы будем закрашивать градиентной кистью, сектора — сплошной, а прямоугольники — узорной. Цвет фигуры, ее размеры и положение будем выбирать случайным образом. Рисование фигур будет инициироваться в обработчике события Click. При каждом щелчке кнопкой мыши на форме будут рисоваться три новых экземпляра фигур каждого типа. Приведем программный код, реализующий рисование. Начнем, как обычно, с полей класса: //fields int cx,cy; Graphics graph; Brush brush; Color color; Random rnd; Инициализация полей производится в методе MyInit, вызываемом конструкторомкласса: void MyInit() < cx = ClientSize.Width; cy = ClientSize.Height; graph = CreateGraphics(); rnd = new Random(); >Рассмотрим теперь основной метод, реализующий рисование фигур различными кистями: void DrawShapes() < for(int i=0; i//градиентной кистью рисуется эллипс, //местоположение случайно Point top = new Point(rnd.Next(cx), rnd.Next(cy)); Size sz = new Size(rnd.Next(cx-top.X), rnd.Next(cy-top.Y)); Rectangle rct = new Rectangle(top, sz); Point bottom = top + sz; brush = new LinearGradientBrush(top, bottom, Color.White,color); graph.FillEllipse(brush,rct); //сплошной кистью рисуется сектор, //местоположение случайно top = new Point(rnd.Next(cx), rnd.Next(cy)); sz = new Size(rnd.Next(cx-top.X), rnd.Next(cy-top.Y)); rct = new Rectangle(top, sz); brush = new SolidBrush(color); graph.FillPie(brush,rct,30f,60f); //узорной кистью рисуется прямоугольник, //местоположение случайно top = new Point(rnd.Next(cx), rnd.Next(cy)); sz = new Size(rnd.Next(cx-top.X), rnd.Next(cy-top.Y)); rct = new Rectangle(top, sz); HatchStyle hs = (HatchStyle)rnd.Next(52); brush = new HatchBrush(hs,Color.White, Color.Black); graph.FillRectangle(brush,rct); > > Здесь многое построено на работе со случайными числами. Случайным образом выбирается один из возможных цветов для рисования фигуры, ее размеры и положение. Наиболее интересно рассмотреть создание кистей разного типа. Когда создается градиентная кисть. brush = new LinearGradientBrush(top, bottom, Color.White,color); то нужно в конструкторе кисти задать две точки и два цвета. Точки определяют интервал изменения оттенков цвета от первого до второго. В начальной точке имеет место первый цвет, в конечной — второй, в остальных точках — их комбинация. Разумно, как это сделано у нас, в качестве точек выбирать противоположные углы прямоугольника, ограничивающего рисуемую фигуру. Наиболее просто задается сплошная кисть: brush = new SolidBrush(color); Для нее достаточно указать только цвет. Для узорной кисти нужно задать предопределенный тип узора, всего их возможно 52. В нашем примере тип узора выбирается случайным образом: HatchStyle hs = (HatchStyle)rnd.Next(52); brush = new HatchBrush(hs,Color.White, Color.Black); Помимо первого аргумента, задающего тип узора, указываются еще два цвета — первый определяет цвет повторяющегося элемента, второй — цвет границы между элементами узора. Непосредственное рисование кистью осуществляют методы группы Fill: graph.FillEllipse(brush,rct); graph.FillPie(brush,rct,30f,60f); graph.FillRectangle(brush,rct); Первый аргумент всегда задает кисть, а остальные зависят от типа рисуемой фигуры. Как правило, всегда задается прямоугольник, ограничивающий данную фигуру. Вызов метода DrawShapes, как уже говорилось, встроен в обработчик события Click формы RandomShapes: private void RandomShapes_Click(object sender, System.EventArgs e)

Класс 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 см. в разделе «Графические объекты».

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

Требования

Заголовок. 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; 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *