Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие визуального программирования.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
3.27 Mб
Скачать
    1. Рисование на форме

В клиентской области формы можно не только размещать элементы управления, но и выполнять рисование. В Framework.Net реализован расширенный графический интерфейс GDI+, обладающий широким набором возможностей. В пространство System::Drawing и System.Drawing2D включено большое количество классов, которые позволяют выполнить рисование в форме.

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

Класс Graphics – это основной класс, с помощью которого выполняется рисование. Создание объектов класса Graphics выполняется не обычным способом, с помощью операции gcnew, а с помощью методов CreateGraphics().

Методы рисования используют такие специальные инструменты, как:

  • цвет (color) – задает цвет пикселей области рисования;

  • перо (pen) – задает тип (шаблон) линии, с помощью которой выполняется рисование графического объекта;

  • кисть (brush) – задает шаблон заполнителя замкнутых областей формы;

  • шрифт (font) – задает способ рисования символов.

Класс перьев Pen

Для описания перьев имеется класс Pen. Создание объекта Pen выполняется с помощью операции gcnew, при этом можно сразу задать цвет линии:

System::Drawing::Pen^P=gcnew System::Drawing::Pen(Color::Black);

Основным свойством данного класса является DashStyle, с помощью которого задается стиль линии, значения перечисления DashStyle, такие, как Solid (сплошная), Dot (точка), Dash (тире), DashDot (тире-точка), DashDotDot (тире-точка-точка).

P->DashStyle::set(Drawing::Drawing2D::DashStyle::DashDotDot);

Толщину линии можно изменить с помощью свойства Width:

P->Width=5;

Вместо создания нового пера можно использовать свойство статического класса Pens, в котором описаны системные перья толщиной в 1 пиксель. Например, Pens::Blue – перо голубого цвета толщиной в 1 пиксель.

Класс кистей Brush

Для работы с одноцветными кистями имеется статический класс Brushes, в котором заданы одноцветные кисти стандартных цветов. Например: Brushes::Red – кисть для закраски сплошным красным цветом.

Кроме того можно создать собственную кисть класса SolidBrush, для которой можно задать собственный цвет заданной интенсивностью.

Цвет и его интенсивность (прозрачность) задается методом FromArgb объекта Color:

Color col=Color::FromArgb(alpha, сolor);

где

- параметр alpha – задает прозрачность цвета. Чтобы создать непрозрачный цвет, установите для alpha значение 255.Чтобы создать полупрозрачный цвет, установите для alpha любое значение от 1 до 254.

- параметр сolor – задает базовый цвет на основе которого создается новый.

Например:

Color customColor = Color::FromArgb( 255, Color::Blue );

SolidBrush^ Bsh = gcnew SolidBrush( customColor );

Создана кисть Bsh непрозрачного голубого цвета.

Для создания кисти класса HatchBrush со стандартным геометрическим рисунком можно создать объект данного класса, для которого выбрать узор, цвет рисунка и цвет фона:

System::Drawing::Drawing2D::HatchBrush^ Brsh = gcnew System::Drawing::Drawing2D::HatchBrush

(System::Drawing::Drawing2D::HatchStyle::Cross, Color::Aqua,Color::Red );

Где Cross – узор, Aqua – цвет линий узора, Red –цвет фона.

Класс шрифтов Font

Для выполнения вывода текста в клиентской области формы нужно указать используемый шрифт, который задаются с помощью класса Font.

При создании объекта класса Font задается тип шрифта и его размер. Кроме того можно задать стиль шрифта. Например:

System::Drawing::Font^fnt = gcnew System::Drawing::Font

("Times New Roman", 24);

Строка с названием шрифтов, которые установлены на компьютере может содержать такие названия, как "Times New Roman", "Arial" или "Courier New".

Третьим параметром можно задать стили шрифта, такие как: Regular (обычный, по умолчанию), Bold (жирный), Italic (курсив), Underline (подчеркнутый), Strikeout (перечеркнутый). Например:

System::Drawing::Font^fnt = gcnew System::Drawing::Font ("Courier New", 12,FontStyle::Bold | FontStyle::Italic);

Методы рисования

В классе Graphics имеются следующие три основные группы методов рисования: 1) методы рисование текста; 2) методы рисование линий и 3) методы рисование и заполнения фигур.

Рисование текста

Для вывода текста на экран относительной левой верхней точки можно использовать следующий метод:

DrawString(Текст, шрифт, кисть, координаты точки);

Рассмотрим пример вывода текста на форму нажатием кнопка:

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {

Graphics ^gf = CreateGraphics();

System::Drawing::Font^fnt = gcnew System::Drawing::Font ("Times New Roman", 24);

SolidBrush^ shBsh = gcnew SolidBrush( Color::Red);

gf->DrawString("Вывод текста!",fnt,shBsh,50,50);

}

Пример формы после нажатия кнопки "Текст" приведен на рисунке 3.48.

Рисунок 3.48 – Результат вывода текста

Для рисования текста под углом вначале необходимо перенести начало координат в левый-верхний угол области вывода, выполнить поворот на заданный угол и только затем выполнить вывод текста. Например:

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {

Graphics ^gf = CreateGraphics();

System::Drawing::Font^fnt = gcnew System::Drawing::Font ("Times New Roman", 24);

SolidBrush^ shBsh = gcnew SolidBrush( Color::Red);

gf->DrawString("Вывод текста!",fnt,shBsh,50,50);

}

Пример результатов после нажатия кнопки "Текст" приведен на рисунке 3.49.

Рисунок 3.49- Форма с текстом под углом 45о.

Рисования простых фигур

Для рисования простых фигур с помощью выбранного пера используется следующий набор перегруженных методов класса Graphics:

  • DrawLine(. . .) – рисование линии. Параметрами этого метода, кроме пера, являются координаты двух точек – начала и конца линии.

  • DrawRectangle(...) – рисование прямоугольника. Параметрами этого метода являются перо, координаты верхнего левого угла, ширина и высота.

  • DrawEllipse(...) – рисование эллипса. Эллипс создается как геометрическая фигура, вписанная в прямоугольник. То есть самого прямоугольника на рисунке не видно, но параметры эллипса, кроме пера, одновременно являются параметрами такого прямоугольника.

  • DrawPoligon(...) – рисование многоугольника. Рисует многоугольник, определяемый массивом структур Point.

  • DrawPie(...) – рисование сектора круга. Рисует сектор, определяемый эллипсом, который задан парой координат, шириной, высотой и двумя радиальными линиями.

Эти методы рисуют только контуры фигуры, но не закрашивают их внутреннюю область.

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

private: System::Void Form1_MouseClick(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) {

System::Drawing::Pen^P=gcnew System::Drawing::Pen(Color::Black);

Graphics ^gfx = CreateGraphics();

P->DashStyle::set(Drawing::Drawing2D::DashStyle::DashDotDot);

P->Width=5;

gfx->DrawEllipse(P,70,50,150, 80);

}

Рисунок 3.50 – Вывод эллипса на форму

Приведем еще один пример рисования многоугольника на форме. Результаты приведены на рисунке 3.51.

private: System::Void Form1_MouseClick(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e)

{

Graphics ^gfx = CreateGraphics();

Point x1= Point(140,50);

Point x2= Point(70,100);

Point x3= Point(70,200);

Point x4=Point( 200,200);

Point x5=Point(200,100);

array <Point>^xx={x1,x2,x3,x4,x5};

gfx->DrawPolygon(Pens::Red,xx);

}

Рисунок 3.51 – Построение многоугольника

Рисование и закраска фигур

Класс Graphics для закраски областей заданной кистью содержит набор перегруженных методов:

  • FillRectangle(...) – закраска прямоугольной области;

  • FillEllipse(...) – закраска эллипса;

  • FillPoligon(...) – закраска прямоугольника;

  • FillPie(...) – закраска сектора круга.

Для закраски фигур вместо параметра Pen в этих методах используется параметр Brush.

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

private: System::Void button3_Click(System::Object^ sender, System::EventArgs^ e) {

Graphics ^gfx = CreateGraphics();

System::Drawing::Drawing2D::HatchBrush^ Brsh = gcnew System::Drawing::Drawing2D::HatchBrush

(System::Drawing::Drawing2D::HatchStyle::Cross, Color::Aqua,Color::Red );

gfx->FillRectangle(Brsh,50,50,160,100);

}

Параметры объекта Brush смотрите выше.

Рисунок 3.52 – Закраска фигуры

Рекомендуем самостоятельно попробовать другие стили заполнения, такие как DarkHorizontal, Weave, Percent20, SmallGrid и другие.