Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методические указания практические ООП 2012 час...doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
18.04 Mб
Скачать

1 Частина

Створимо новий проект

Розташуємо на формі кнопку

Створимо нову форму та розташуємо на ній наступні едементи

Для форми створимо обробники подій

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

this->Text = "Выбери графический примитив";

listBox1->Items->AddRange(gcnew array<Object^> {"Окружность",

"Отрезок", "Прямоугольник", "Сектор",

"Текст", "Эллипс", "Закрашенный сектор"});

Font = gcnew System::Drawing::Font("Times New Roman", 14.F);

}

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

// Здесь вместо этого события можно было бы обработать

// событие listBox1_Click.

// Создание графического объекта

Graphics ^ Графика = this->CreateGraphics();

// Создание пера для рисования им фигур

Pen ^ Перо = gcnew Pen(Color::Red);

// Создание кисти для "закрашивания" фигур

Brush ^ Кисть = gcnew SolidBrush(Color::Red);

// Очистка области рисования путем ее окрашивания

// в первоначальный цвет формы

Графика->Clear(SystemColors::Control);

// или Графика->Clear(Color::FromName("Control"));

// или Графика->Clear(ColorTranslator::FromHtml("#EFEBDE"));

switch (listBox1->SelectedIndex) // Выбор фигуры:

{

case 0: // - выбрана окружность:

Графика->DrawEllipse(Перо, 50, 50, 150, 150); break;

case 1: // - выбран отрезок:

Графика->DrawLine(Перо, 50, 50, 200, 200); break;

case 2: // - выбран прямоугольник:

Графика->DrawRectangle(Перо, 50, 30, 150, 180); break;

case 3: // - выбран сектор:

Графика->DrawPie(Перо, 40, 50, 200, 200, 180, 225); break;

case 4: // - выбран текст:

Графика->DrawString("Каждый во что-то верит, но\n" +

"жизнь преподносит сюрпризы.",

Font, Кисть, 10, 100); break;

case 5: // - выбран эллипс:

Графика->DrawEllipse(Перо, 30, 30, 150, 200); break;

case 6: // - выбран закрашеный сектор:

Графика->FillPie(Кисть, 20, 50, 150, 150, 0, 45); break;

}

}

Повернемося до першої форми. До першої форми підключимо другу форму. Для події клацання на кнопці створимо обробник для відкриття другої форми

Запустимо прикладення. Якщо клацнемо на кнопці

Завершимо роботу із програмою.

2 Частина

Розташуємо на формі кнопку

Додамо до проекту нову форму. Для форми створимо обробники подій

private: System::Void Form_t_Paint(System::Object^ sender, System::Windows::Forms::PaintEventArgs^ e) {

// Событие перерисовки экранной формы:

this->ClientSize = System::Drawing::Size(240, 200);

// Устанавливаем вершины треугольника:

Point p1 = Point(20, 20);

Point p2 = Point(225, 66);

Point p3 = Point(80, 185);

// Инициализируем массив точек:

array<Point> ^ Точки = { p1, p2, p3 };

// Рисуем закрашенный цветом ControlDark многоугольник:

e->Graphics->FillPolygon(gcnew SolidBrush(

SystemColors::ControlDark), Точки);

// Задаем цвет, который будет выглядеть прозрачным:

this->TransparencyKey = SystemColors::ControlDark;

}

Повернемося до першої форми. До першої форми підключимо потрібну форму. Для події клацання на кнопці створимо обробник для відкриття потрібної форми.

Запустимо прикладення

Завершимо роботу із програмою.

Частина 3

Розташуємо на формі кнопку

Додамо до проекту нову форму. На формі розташуємо наступні елементи.

Для форми створимо обробники подій

// Программа позволяет при нажатой левой или правой кнопке мыши

// рисовать в форме

// ~ ~ ~ ~ ~ ~ ~

// Булева переменная Рисовать_ли дает разрешение на рисование:

bool Рисовать_ли;

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

this->Text = "Рисую мышью в форме";

button1->Text = "Стереть";

Рисовать_ли = false; // в начале - не рисовать

}

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

// Методы очистки формы:

Graphics ^ Графика = CreateGraphics();

Графика->Clear(this->BackColor);

// Графика->Clear(SystemColors::Control);

// Графика->Clear(Color::FromName("Control"));

// Графика->Clear(Color::FromKnownColor(KnownColor::Control));

// Графика->Clear(ColorTranslator::FromHtml("#EFEBDE"));

// this->Refresh(); // Этот метод также перерисовывает форму

}

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

// Если нажата кнопка мыши - MouseDown, то рисовать

Рисовать_ли = true;

}

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

// Если кнопку мыши отпустили, то НЕ рисовать

Рисовать_ли = false;

}

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

// Рисование прямоугольника, если нажата кнопка мыши

if (Рисовать_ли == true)

{ // Рисовать прямоугольник в точке (e.X, e.Y)

Graphics ^ Графика = CreateGraphics();

Графика->FillRectangle(gcnew SolidBrush(Color::Red),

e->X, e->Y, 10, 10);

// 10x10 пикселов — размер сплошного прямоугольника

// e->X, e->Y — координаты указателя мыши

delete Графика;

}

}

Повернемося до першої форми. До першої форми підключимо потрібну форму. Для події клацання на кнопці створимо обробник для відкриття потрібної форми.

Запустимо прикладення

Завершимо роботу із програмою.

Частина 4

Розташуємо на формі кнопку

Додамо до проекту нову форму. На формі розташуємо наступні елементи.

Для форми створимо обробники подій

#pragma endregion

// Программа рисует график продаж по месяцам. Понятно, что таким же образом

// можно построить любой график по точкам для других прикладных целей

// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~

// Исходные данные для построения графика (то есть исходные точки):

array<String^>^ Months;

array<int>^ Sales;

Graphics ^ Графика;

// Далее, создаем объект Bitmap, который имеет

// тот же размер и разрешение, что и PictureBox

Bitmap^ Растр;

int ОтступСлева, ОтступСправа, ОтступСнизу, ОтступСверху;

int ДлинаВертОси, ДлинаГоризОси, YГоризОси, Xmax, XНачЭпюры;

// Шаг градуировки по горизонтальной и вертикальной осям:

double ГоризШаг; int ВертШаг;

// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~

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

Months = gcnew array<String^> {"Янв", "Фев", "Март", "Апр", "Май",

"Июнь", "Июль", "Авг", "Сент",

"Окт", "Нояб", "Дек"};

Sales = gcnew array<int> {335, 414, 572, 629, 750, 931,

753, 599, 422, 301, 245, 155};

ОтступСлева = 35; ОтступСправа = 15;

ОтступСнизу = 20; ОтступСверху = 10;

this->Text = " Построение графика ";

button1->Text = "Нарисовать график";

this->ClientSize = System::Drawing::Size(593, 342);

Растр = gcnew Bitmap(pictureBox1->Width, pictureBox1->Height,

pictureBox1->CreateGraphics());

// pictureBox1->BorderStyle = BorderStyle::FixedSingle;

YГоризОси = pictureBox1->Height - ОтступСнизу;

Xmax = pictureBox1->Width - ОтступСправа;

ДлинаГоризОси = pictureBox1->Width - (ОтступСлева + ОтступСправа);

ДлинаВертОси = YГоризОси - ОтступСверху;

ГоризШаг = (double)(ДлинаГоризОси / Sales->Length);

ВертШаг = (int)(ДлинаВертОси / 10);

XНачЭпюры = ОтступСлева + 30;

}

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

// Последовательно вызываем следующие процедуры:

Графика = Graphics::FromImage(Растр);

РисуемОси();

РисуемГоризЛинии();

РисуемВертЛинии();

РисованиеЭпюры();

pictureBox1->Image = Растр;

// Освобождаем ресурсы, используемые объектом класса Graphics:

delete Графика; // - эквивалент C#: Графика.Dispose

} // ~ ~ ~ ~ ~ ~ ~ ~ ~ ~

private: void РисуемОси()

{

//Pen Перо = new Pen(Color.Black, 2);

Pen ^ Перо = gcnew Pen(Color::Black, 2);

// Рисование вертикальной оси координат:

Графика->DrawLine(Перо, ОтступСлева, YГоризОси,

ОтступСлева, ОтступСверху);

// Рисование горизонтальной оси координат:

Графика->DrawLine(Перо, ОтступСлева, YГоризОси,

Xmax, YГоризОси);

Drawing::Font ^ Шрифт = gcnew Drawing::Font("Arial", 8);

for (int i = 1; i <= 10; i++)

{ // Рисуем "усики" на вертикальной координатной оси:

int Y = YГоризОси - i * ВертШаг;

Графика->DrawLine(Перо, ОтступСлева - 5, Y, ОтступСлева, Y);

// Подписываем значения продаж через каждые 100 единиц:

Графика->DrawString((i * 100).ToString(), Шрифт,

Brushes::Black, 2, Y - 5.F);

}

// Подписываем месяцы на горизонтальной оси:

for (int i = 0; i <= Months->Length - 1; i++)

Графика->DrawString(Months[i], Шрифт, Brushes::Black,

ОтступСлева + 18.F + (int)(i * ГоризШаг), YГоризОси + 4.F);

} // ~ ~ ~ ~ ~ ~ ~ ~ ~ ~

private: void РисуемГоризЛинии()

{

Pen ^ ТонкоеПеро = gcnew Pen(Color::LightGray, 1);

for (int i = 1; i <= 10; i++)

{ // Рисуем горизонтальные почти "прозрачные" линии:

int Y = YГоризОси - ВертШаг * i;

Графика->DrawLine(ТонкоеПеро, ОтступСлева + 3, Y, Xmax, Y);

}

delete ТонкоеПеро; // - эквивалент C#: ТонкоеПеро.Dispose();

} // ~ ~ ~ ~ ~ ~ ~ ~ ~ ~

private: void РисуемВертЛинии()

{ // Рисуем вертикальные почти "прозрачные" линии

Pen ^ ТонкоеПеро = gcnew Pen(Color::Bisque, 1);

for (int i = 0; i <= Months->Length - 1; i++)

{

int X = XНачЭпюры + (int)(ГоризШаг * i);

Графика->DrawLine(ТонкоеПеро, X, ОтступСверху,

X, YГоризОси - 4);

}

delete ТонкоеПеро;

} // ~ ~ ~ ~ ~ ~ ~ ~ ~ ~

private: void РисованиеЭпюры()

{

double ВертМасштаб = (double)ДлинаВертОси / 1000;

// значения ординат на экране:

array<int>^ Y = gcnew array<int>(Sales->Length);

// значения абсцисс на экране:

array<int>^ X = gcnew array<int>(Sales->Length);

for (int i = 0; i <= Sales->Length - 1; i++)

{ // Вычисляем графические координаты точек:

Y[i] = YГоризОси - (int)(Sales[i] * ВертМасштаб);

// Отнимаем значения продаж, поскольку ось Y экрана

// направлена вниз

X[i] = XНачЭпюры + (int)(ГоризШаг * i);

}

// Рисуем первый кружок:

Pen ^ Перо = gcnew Pen(Color::Blue, 3);

Графика->DrawEllipse(Перо, X[0] - 2, Y[0] - 2, 4, 4);

for (int i = 0; i <= Sales->Length - 2; i++)

{ // Цикл по линиям между точками:

Графика->DrawLine(Перо, X[i], Y[i], X[i + 1], Y[i + 1]);

// Отнимаем 2, поскольку диаметр (ширина) точки = 4:

Графика->DrawEllipse(Перо, X[i + 1] - 2, Y[i + 1] - 2,

4, 4);

}

} // ~ ~ ~ ~ ~ ~ ~ ~ ~ ~

Повернемося до першої форми. До першої форми підключимо потрібну форму. Для події клацання на кнопці створимо обробник для відкриття потрібної форми.

Запустимо прикладення

Завершимо роботу із програмою.

Завдання до виконання практичної роботи №6

Виконати завдання частин 1-4, створити індивідуальне прикладення, назви форм повинні відрізнятися від наведених у прикладу розробки.

Критерії оцінювання :

на "3" студент виконує два із завдань на вибір , пояснює лістинги своїх програм

на "4" студент виконує три завдання, пояснює лістинги своїх програм

на "5" студент виконує чотири завдання, пояснює лістинги своїх програм

Контрольні запитання:

  1. Яким чином відбувається малювання графічних примитівів?

  2. Яким чином зробити прозорий трикутник на формі?

  3. Яким чином малювання у формі мишою?

  4. Яким чином відбувається побудова графіку методами класу Graphics?

Практична робота №7

Тема: Введеня та виведення табличних даних

Мета: Навчитися роботі із таблічними даними

Хід роботи: