Computers and programming The 10th lecture Jiří Šebesta TOPIC – programming in MSVS for Windows 1. 2. 3. Basic definitions Form application Examples Basic definitions (1/4) • Project for Windows: – header files • files xxx.h – source code files • files xxx.c or xxx.cpp – resources = above all graphic objects determined by set of properties and behavior • files xxx.rc (xxx.ico) Basic definitions (2/4) • Resources: – menus – shortcuts – bit rasters, icons, cursors – character strings – tool panels – dialog windows • Dialog window: – fundamental objekt (each window is dialog window) – control objects in dialog window are again dialog windows with special properties – applied principle: parent’s vs. child’s dialogs Basic definitions (3/4) • Dialog window (resp. object): – properties – variables define a visual characteristic and behavior of window (object) and events, i.e. functions called if an events in window (object) occurs, e.g. click by mouse - window modality - modal window, cannot be leaved without closing (style attribute WS_VISIBLE is set) - unmodal window can be whenever leaved (defocused) Basic definitions (4/4) • Fundamental sorts of Win applications: – using MFC (Microsoft Foundation Class Library) • SDI (Single-document interface) – application using one document • MDI (Multiple-document interface) – application using more documents at the same time (e.g. MS Visual Studio is MDI application) • Dialog application – single dialog window for simple programs – using standard resources from Windows • Form application for Windows Form application (1/10) • Form project establishment (MSVS 2008/10/12): Form application (2/10) • Form creating (setting of properties + inserting of standard graphic objects to design Form1.h[design]): Form application (3/10) • Automatically generated code for setting of graphic object properties in Form1.h : this->ColorBox->BackColor = system::Drawing::Color::Transparent; this->ColorBox->Controls->Add(this->RB_blue); this->ColorBox->Controls->Add(this->RB_green); this->ColorBox->Controls->Add(this->RB_red); this->ColorBox->ForeColor = system::Drawing::SystemColors::ControlText; this->ColorBox->Location = System::Drawing::Point(2, 86); this->ColorBox->Name = L"ColorBox"; this->ColorBox->Size = System::Drawing::Size(88, 100); this->ColorBox->TabIndex = 1; this->ColorBox->TabStop = false; this->ColorBox->Text = L"Color"; • this is pointer to this form Form application (4/10) • Function generation for event processing • in Form1.h a header of function for events is generated, required code can be written into the body of this function … private: System::Void RB_blue_Click(System::Object^ sender, System::EventArgs^ e) { this->My_text->ForeColor = System::Drawing::Color::Blue; } … Form application (5/10) • Function main() in Ex76.cpp #include "stdafx.h" #include "Form1.h" using namespace Ex76; [STAThreadAttribute] int main(array<System::String ^> ^args) { // Enabling Windows XP visual effects before any controls are created Application::EnableVisualStyles(); Application::SetCompatibleTextRenderingDefault (false); // Create the main window and run it Application::Run(gcnew Form1()); return 0; } Code: Ex76 Form application (6/10) • Windows Form application in MSVS2013: new project • A form application can not be established directly • It needs to insert an empty project of type CLR Empty Project with adequate name Form application (7/10) • A form application required an adding UI – Windows Form with adequate name, e.g. MyForm.h or Form.h, by Project – Add (use right mouse button): Form application (8/10) • Insert to MyForm.cpp following code: #include "MyForm.h" using namespace System; using namespace System::Windows::Forms; [STAThread] void Main(array<System::String ^> ^args) { Application::EnableVisualStyles(); Application::SetCompatibleTextRenderingDefault (false); Ex76::MyForm form; Application::Run(%form); return 0; } • Modify code according to project name and form name Form application (9/10) • Set in Project – Properties: Linker - System Form application (10/10) • Set Linker – Advanced – Entry Point to name of starting function, e.g. Main Examples (1/7) 1) Create a form application for a simple calculator – adding, subtracting, multiplying and division of two rational numbers. • Visual design of form Examples (2/7) Function for text reading from the TextBox and conversion to double double get_A(void) { return System::Convert::ToDouble(this->text_A->Text); } double get_B(void) { return System::Convert::ToDouble(this->text_B->Text); } object of form conversion method pointer to variable of TextBox named calling TextBox this form as text_B Examples (3/7) Event processing – pressing of particular buttons private: System::Void bt_plus_Click(System::Object^ sender, System::EventArgs^ e) { this->Res->Text = System::Convert::ToString(get_A()+get_B()); } … private: System::Void bt_div_Click(System::Object^ sender, System::EventArgs^ e) { this->Res->Text = System::Convert::ToString(get_A()/get_B()); } function of pointer to class System this form Code: Ex77 conversion function for method inputs reading calling calling Examples (4/7) 2) Create an form application for simple database of computers (items: producer, price and memory capacity) with record up to 20 computers using dynamic access. • Visual design of form Examples (5/7) Building-up of own function library computer.h #include <stdlib.h> #include <string.h> typedef struct t_pc { char prod[ 20]; // name of the producer int price; // price of the computer float mem; // RAM capacity in GB } a_pc; void add(char* _prod, int _price, float _mem); // adding new computer void sort(void); // sorting according to the price t_pc* get_fwd(void); // point out to the next computer t_pc* get_bwd(void); // point out to the prev. computer int show_price(void);// get price of an added pc int show_cheap(void);// get price of the cheapest pc Examples (6/7) Array of pointers to records declaration + solution example of the function add() in computer.cpp #include "computer.h" // definition of the struct t_pc t_pc *register[20]; // array of pointers to computers int index=0; // first free position in the katalog int ptr=index-1; // pointer to a pc displayed in edits void add(char* _prod, int _price, float _mem) { t_pc *my_pc; my_pc = (t_pc*) malloc(sizeof(t_pc)); strcpy(my_pc->prod, _prod); my_pc->price = _price; my_pc->mem = _mem; register[ptr=index++] = my_pc; } Examples (7/7) Adding the library pocitac.h and processing of event for pressing button Add in Form1.h #pragma once #include "computer.h" using namespace System::Runtime::InteropServices; namespace Ex78 { …. private: System::Void AddBtn_Click(System::Object^ sender, System::EventArgs^ e) { add((char*)Marshal::StringToHGlobalAnsi(ProdEdit>Text).ToPointer(), System::Convert::ToInt32(PriceEdit>Text), System::Convert::ToDouble(MemEdit->Text)); ShowLbl->Text = System::Convert::ToString(show_price()); } Code: Ex78 conversion method VisualString => *char calling TOPIC OF THE NEXT LECTURE 1. FINAL TEST THANK YOU FOR YOUR ATTENTION