ТПКС-лаба1
.docxМІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ ХАРКІВСЬКИЙ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ РАДІОЕЛЕКТРОНІКИ
Кафедра КІТАМ
ЗВІТ з лабораторної роботи № 1 з дисципліни: «Технологіі програмування комп’ютерних систем»
Варіант 2
Виконав: Перевірив:
ст. гр. АКТСІу -17-1 ст. викл. каф. КІТАМ
Черкашин В.А. Бронніков А.І.
Юрченко В.Р.
Харків 2019
1 РОЗРОБКА ПРОСТИХ .NET ПРОГРАМ ЗАСОБАМИ C++/CLI. ОБРОБКА ПОДІЙ
1.1 Мета роботи
Створення найпростішої віконної процедури з обробками подій засобами С++/CLI на основі Windows Forms у середовищі Microsoft Visual Studios 2010.
1.2 Практична частина та лістинг програмного коду
Файл MyForm:
#include "MyForm.h"
using namespace System; // використання простору імен System
using namespace System::Windows::Forms; // використання Windows Form
[STAThreadAttribute] // вказання однопотокового типу програми
void Main(array<String^>^ args) // Main() з параметрами командного рядка
{ Application::EnableVisualStyles(); // активація візуальних стилів
Application::SetCompatibleTextRenderingDefault(false);
PetrPoroshenko::MyForm form; // створення форми в межах проекту
Application::Run(%form); // запуск програми із параметром-формою
}
#pragma once
namespace PetrPoroshenko {
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
/// <summary>
/// Сводка для MyForm
/// </summary>
public ref class MyForm : public System::Windows::Forms::Form
{
public:
MyForm(void)
{
InitializeComponent();
//
//TODO: добавьте код конструктора
//
}
protected:
/// <summary>
/// Освободить все используемые ресурсы.
/// </summary>
~MyForm()
{
if (components)
{
delete components;
}
}
private: System::Windows::Forms::Timer^ timer1;
protected:
private: System::ComponentModel::IContainer^ components;
private:
/// <summary>
/// Требуется переменная конструктора.
/// </summary>
#pragma region Windows Form Designer generated code
/// <summary>
/// Обязательный метод для поддержки конструктора - не изменяйте
/// содержимое данного метода при помощи редактора кода.
/// </summary>
void InitializeComponent(void)
{
this->components = (gcnew System::ComponentModel::Container());
this->timer1 = (gcnew System::Windows::Forms::Timer(this->components));
this->SuspendLayout();
//
// timer1
//
this->timer1->Tick += gcnew System::EventHandler(this, &MyForm::MyForm_DoubleClick);
//
// MyForm
//
this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
this->ClientSize = System::Drawing::Size(292, 273);
this->Name = L"MyForm";
this->Text = L"MyForm";
this->Deactivate += gcnew System::EventHandler(this, &MyForm::MyForm_Deactivate);
this->Load += gcnew System::EventHandler(this, &MyForm::MyForm_Load);
this->ResizeBegin += gcnew System::EventHandler(this, &MyForm::MyForm_ResizeBegin);
this->DoubleClick += gcnew System::EventHandler(this, &MyForm::MyForm_DoubleClick);
this->MouseCaptureChanged += gcnew System::EventHandler(this, &MyForm::MyForm_MouseCaptureChanged);
this->Move += gcnew System::EventHandler(this, &MyForm::MyForm_Move);
this->ResumeLayout(false);
}
#pragma endregion
private: System::Void MyForm_Load(System::Object^ sender, System::EventArgs^ e) {
}
private: System::Void MyForm_ResizeBegin(System::Object^ sender, System::EventArgs^ e) {
int x = MyForm::Size.Width;
int y = MyForm::Size.Height;
Graphics ^g = MyForm::CreateGraphics();
g->Clear(Color::LightGray);
String ^s;
s = String::Format("Form size is changed to: {0} {1}",
x.ToString(), y.ToString());
g->DrawString(s, gcnew Drawing::Font("Arial", 12),
Brushes::Black, 5.0, 150.0);
}
private: System::Void MyForm_Move(System::Object^ sender, System::EventArgs^ e) {
int x = MyForm::DesktopLocation.X;
int y = MyForm::DesktopLocation.Y;
Graphics ^g = MyForm::CreateGraphics();
g->Clear(Color::LightGray);
String ^s;
s = String::Format("Form position: {0} {1}",
x.ToString(), y.ToString());
g->DrawString(s, gcnew Drawing::Font("Arial", 12),
Brushes::Black, 5.0, 110.0);
}
private: System::Void MyForm_DoubleClick(System::Object^ sender, System::EventArgs^ e) {
timer1->Interval=5000;
timer1->Start();
String ^s;
Graphics ^g = MyForm::CreateGraphics();
DateTime localDate;
localDate = System::DateTime::Now;
s = String::Format("Some Text with Timer {0}", localDate.ToString());
g->Clear(Color::White);
g->DrawString(s, gcnew Drawing::Font("Arial", 10), Brushes::Black, 5.0, 15.0);
}
private: System::Void MyForm_MouseCaptureChanged(System::Object^ sender, System::EventArgs^ e) {
String ^s;
Graphics ^g = MyForm::CreateGraphics();
s = String::Format("MousheCaptureChanged");
g->DrawString(s, gcnew Drawing::Font("Arial", 12),
Brushes::Black, 5.0, 200.0);
}
private: System::Void MyForm_Deactivate(System::Object^ sender, System::EventArgs^ e) {
String ^s;
Graphics ^g = MyForm::CreateGraphics();
s = String::Format("Deactivated");
g->DrawString(s, gcnew Drawing::Font("Arial", 12),
Brushes::Black, 5.0, 230.0);
}
};
}Результат виконання завдання подано на рисунках 1.1-1.4
Рисунок 1.1 – Обробка подій Move та MouseCaptureChanged
Рисунок 1.2 – Обробка подій Resize
Рисунок 1.3 – Обробка подій Timer
Рисунок 1.4 – Обробка подій Focus
ВИСНОВКИ
На лабораторній роботі було досліджено середовище програмної розробки Microsoft Visual Studio 2010 та побудовано вікно з обробками подій засобами C++/CLI на основі Windows Forms.
Програма, яка використає в якості основної мови програмування С++/CLI, створює вікно Windows Form і має на меті використання .NET Framework, як правило розпочинається з виклику функції Main(), яка зазвичай містить активізацію деяких параметрів та команди запуску програми з формою. Основні програмні блоки знаходяться у файлі *.h.
Основою програми є вікно, що повідомляє про результати обробки подій, тобто заданих запропонованих випадків, коли щось трапилось (натиснута клавіша, змінився розмір вікна, змінився параметр фокусу та ін.), шляхом виведення форматованого тексту у вікні (за допомогою функції DrawString) та виведення вікна з повідомленням (за допомогою функції MessageBox).