Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

675_Lebedenko_L.F._Osnovy_vizual'nogo_programmirovanija_

.pdf
Скачиваний:
6
Добавлен:
12.11.2022
Размер:
3.28 Mб
Скачать

Рис. 3.47. Пример контекстного меню

Как видим на рисунке 3.47, меню работает.

Аналогично меню можно создать панель инструментов toolStrip.

3.6.Рисование на форме

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

возможностей. В пространство System::Drawing и System.Drawing2D

включено большое количество классов, которые позволяют выполнить рисование в форме.

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

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

CreateGraphics().

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

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

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

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

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

71

Класс перьев 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.

параметр color задает базовый цвет, на основе которого создается

новый.

72

Например:

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) методы рисования и заполнения фигур.

73

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

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

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);

}

74

Пример результатов после нажатия кнопки "Текст" приведен на рисунке 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();

75

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. Построение многоугольника

76

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

Класс 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. Закраска фигуры

77

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

такие как DarkHorizontal, Weave, Percent20, SmallGrid и другие.

3.7. Создание многооконных приложений

Для приложения Windows могут понадобиться несколько форм, помимо основной. В .NET Framework можно легко добавлять диалоговые окна, экраны запуска и другие формы поддержки.

Чтобы добавить новую форму Windows Forms, выполните следующие действия:

В Обозревателе решений наведите мышь на папку проекта и правой кнопкой мыши вызовите динамическое меню. Выберите команду Добавить -> Создать Элемент.

Рис. 3.53. Создание нового элемента

В появившемся окне шаблонов выберите шаблон Windows Forms и укажите имя новому элементу, например form. При этом в обозревателе решений вы увидите два новых файла: form.cpp и form.h. В окне редактирования откроется окно конструктора для form.h, а в самом файле сгенерируется программный код с описанием класс form.

Прежде чем перейти к разработке приложения, свяжем главную форму с дочерней, подключив заголовочный файл form.h директивой #include к файлу

Form1.h.

78

Рис. 3.54. Подключение заголовочный файл form.h

Создадим на первой форме кнопку и зададим для данного элемента значение атрибута Text: «На вторую кнопку». Примерный вид формы приведен на рисунке 3.55.

Рис. 3.55. Вид главной формы

Создадим обработчик события нажатия кнопки Button, который будет создавать экземпляр объекта form, скрывать главную форму и открывать новую:

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

form ^Form2=gcnew form();//создает вторую

форму

this->Hide(); Form2->ShowDialog(); this->Show();

}

Теперь перейдем в окно конструктора новой форму и создадим на этой форме кнопку и зададим для данного элемента значение атрибута Text: «На первую кнопку». Примерный вид второй формы приведен на рисунке 3.55.

79

Рис. 3.56. Вид второй формы

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

this->Close();

Проверив работу приложения, мы увидим, что нажатие кнопок на формах приводит к переходу на другую форму.

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

4. Лабораторный практикум по визуальному программированию

ЛАБОРАТОРНАЯ РАБОТА 1

Создание простейшего Windows-приложения

Цель работы: научиться создавать элементы интерфейсов для приложения и писать простой обработчик событий на C++ для приложения Windows Forms, работающего под управления .NET Framework.

Методические указания к лабораторной работе

В лабораторной работе необходимо научиться создавать формы и работать с простейшими элементами управления, такими как Надпись (label), 80