Počítače a programování 2

advertisement
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
Download