Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Троелсен Э. Язык программирования С# 2010 и п...docx
Скачиваний:
113
Добавлен:
21.09.2019
Размер:
6.92 Mб
Скачать

Работа с типами Pen

Типы Pen GDI+ используются для построения линий, соединяющих конечные точки. Сам по себе тип Pen не слишком полезен. Для выполнения визуализации геометрической формы на поверхности производного от Control типа действительный тип Pen следует направить подходящему методу визуализации, определенному классом Graphics. Вообще говоря, с объектами Pen обычно используются методы DrawXXX(), позволяющие отобразить некоторый набор линий на соответствующей графической поверхности.

Тип Pen определяет небольшой набор инструкторов, позволяющих задать начальный цвет и ширину пера. По большей части функциональные возможности Pen задаются свойствами, поддерживаемыми данным типом. Описания некоторых из этих свойств предлагаются в табл. 20.7.

Таблица 20.7. Свойства Pen

Свойства

Описание

Brush

Определяет тип Brush для использования с данным типом Pen

Color

Определяет тип Color для использования с данным типом Pen

CustomStartCap CustomEndCap

Читает или устанавливает параметры пользовательского стиля концов линий, создаваемых с помощью данного типа Pen. Стиль концов линий – это просто термин, используемый для обозначения того, как должен выглядеть начальный и заключительный 'штрих" данного пера. Эти свойства позволяют строить пользовательские стили начала и конца линий для типов Pen

DashCap

Читает или устанавливает параметры стиля концов линий, используемого для прерывистых линий, создаваемых с помощью данного типа Pen

DashPattern

Читает или устанавливает массив пользовательской маски для рисования прерывистых линий. Соответствующие "тире" складываются из сегментов линий

DashStyle

Читает или устанавливает параметры стиля, используемого для прерывистых линий, создаваемых с помощью данного типа Pen

StartCap EndCap

Читает или устанавливает встроенный стиль концов линий, создаваемых с помощью данного типа Pen. Стиль концов линий Pen устанавливается в соответствии с перечнем LineCap, определенным в пространстве имен System.Drawing.Drawing2D

Width

Читает или устанавливает ширину данного Pen

DashOffset

Читает или устанавливает расстояние от начала линии до начала шаблона прерывистой линии

Помните о том, что вдобавок к типу Pen в GDI+ предлагается коллекция Pens. Используя ряд статических свойств, вы можете извлечь из этой коллекции объект Pen (или нужный цвет) "на лету", не создавая пользовательский тип Pen вручную. Однако следует знать, что возвращаемый: при этом тип Pen всегда имеет ширину, равную 1.

Если вам понадобятся какие-то экзотические перья, вы должны создать тип Pen вручную. Предоставив вам эту информацию, я теперь могу перейти к построению примеров геометрических изображений с помощью простых типов Pen. Предположим, что у нас есть главный объект Form, способный отвечать на запросы визуализации. Реализация ответа выглядит так.

private void MainForm_Paint(object sender, PaintEventArgs e) {

 Graphics ge.Graphics;

 // Создание большого пера синего цвета.

 Pen bluePen = new Pen(Color.Blue, 20);

 // Получение готового пера из типа Pens.

 Pen pen2 = Pens.Firebrick;

 // Визуализация некоторых шаблонов.

 g.DrawEllipse(bluePen, 10, 10, 100, 100);

 g.DrawLine(pen2, 10, 130, 110, 130);

 g.DrawPie(Pens.Black, 150, 10, 120, 150, 90, 80);

 // Рисование пурпурного полигона с пунктирной границей.…

 Pen pen3 = new Pen(Color.Purple, 5);

 pen3.DashStyle = DashStyle.DashDotDot;

 g.DrawPolygon(pen3, new Point[] { new Point(30, 140), new Point(265, 200), new Point(100, 225), new Point(190, 190), new Point(50, 330), new Point(20, 180) });

 //… и прямоугольника, содержащего текст.…

 Rectangle r = new Rectangle (150, 10, 130, 60);

 g.DrawRectangle(Pens.Blue, r);

 g.DrawString("Эй, вы, там, наверху!… Я вам привет передаю.", new Font("Arial", 11), Brushes.Black, r);

}

Заметьте, что тип Pen, применяемый для отображения многоугольника, использует перечень DashStyle (определенный в System.Drawing.Drawing2D).

public enum DashStyle {

 Solid, Dash, Dot,

 DashDot, DashDotDot, Custom

}

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

private void MainForm_Paint(object sender, PaintEventArgs e) {

 Graphics g = e.Graphics;

 …

 // Рисование прерывистой линии вдоль границы формы

 // по пользовательскому шаблону.

 Pen customDashPen = new Pen(Color.BlueViolet, 10);

 float[] myDashes = {5.0f, 2.0f, 1.0f, 3.0f};

 customDashPen.DashPattern = myDashes;

 g.DrawRectangle(customDashPen, ClientRectangle);

}

На рис. 20.12 показан вывод этого варианта обработчика событий Paint.

Исходный код. Проект CustomPenApp размещен в подкаталоге, соответствующем главе 20.

Рис. 20.12. Работа с типами Pen