440 likes | 584 Views
Visual C++ Z áklady tvorby aplikácií. Osnova prednášky. Vývojové prostredia pre C++ Microsoft Visual C++ Základy tvorby užívateľského rozhrania Jednoduchý príklad. Vývojové prostredia pre C++.
E N D
Osnova prednášky • Vývojové prostredia pre C++ • Microsoft Visual C++ • Základy tvorby užívateľského rozhrania • Jednoduchý príklad
Vývojové prostredia pre C++ • Microsoft Visual C++ - komerčný softvér pre MS Windows, veľmi rozšírený v softvérových spoločnostiach, je stavaný na tvorbu rôznych typov aplikácií, má veľmi široké možnosti a je vhodný aj na tvorbu rozsiahlych projektov. Má prepracovaný systém debugovania (hľadania chýb), automatického dopĺňania kódu a orientácie v programe a tiež dobrú dokumentáciu. Jeho obmedzená verzia Express Edition je voľne šíriteľná. • Borland C++ Builder – komerčný softvér pre MS Windows, ktorý je užívateľsky príjemný a tvorba aplikácií v ňom je jednoduchá a intuitívna, vďaka čomu je populárny. Má veľké množstvo komponentov. Má voľne šíriteľnú obmedzenú verziu Borland Turbo C++ Explorer. • Dev-C++ - voľne šíriteľný populárny softvér pre Windows, svojím usporiadaním pripomína MS Visual C++. • KDevelop – voľne šíriteľný softvér pre Linux, takisto pripomína MS Visual C++ a má podobnú funkčnosť. • QT Designer – softvér schopný pracovať na viacerých platformách, podobne ako Borland C++ sa vyznačuje jednoduchosťou a intuitívnosťou. Má dobrú dokumentáciu a systém automatického dopĺňania kódu. Má voľne šíriteľnú verziu.
Microsoft Visual C++ • História: MS Visual C++ 1.0 – 1992 – prvá verzia MS Visual C++ 2.0 – 1995 – rozšírená oproti 1.0, ale málo používaná MS Visual C++ 6.0 – 1998 – široko rozšírená verzia, ktorá sa používa ešte aj dnes MS Visual C++ .NET 2003 – rozšírená verzia s podporou pre .NET framework MS Visual C++ 2005 MS Visual C++ 2008 MS Visual C++ 2010 – posledná stabilná verzia • Aktuálne verzie VC++ 2010: Express Edition – voľne šíriteľná verzia Professional – pre profesionálne aplikácie, pre individuálnych programátorov Premium – pre teamové projekty Ultimate – pre rozsiahle teamové projekty, s podpornými prostriedkami pre správu rozsiahleho kódu
.NET Framework • .NET Framework je softvérový komponent, ktorý je priamo súčasťou Windows (Windows Server 2003, Windows Vista), alebo môže byť k Windows doinštalovaný (väčšina starších verzií). Jeho úlohou je poskytovať nové prostriedky pre tvorbu windowsovských aplikácií a efektívne riadiť chod programov, ktoré boli preň vyvinuté. • .NET Framework sa skladá z dvoch častí: 1. Knižnica tried – obsahuje množstvo tried, ktoré uľahčujú tvorbu aplikácií pre Windows, napr. triedy pre vytváranie užívateľského rozhrania, prácu s databázami, tvorbu webovských aplikácií, sieťovú komunikáciu, grafiku, šifrovanie a podobne. 2. Common Language Runtime (CLR) – je to jednotný prostriedok na spúšťanie a riadenie programov napísaných v rôznych programovacích jazykoch. Pri kompilácii sa kód z nejakého jazyka preloží do pomocného jazyka (Microsoft Intermediate Language) a až pri spúšťaní sa kód preloží do strojového kódu. Umožňuje to lepšiu prenosnosť kódu na rôzne počítače. CLR sa takisto stará o správu pamäti, spracovanie výnimiek, paralelné spúšťanie programov a bezpečnosť.
Managed C++ • Managed C++je modifikácia C++ realizovaná firmou Microsoft. Je špeciálne navrhnutá tak, aby spolupracovala s .NET Framework. Dá sa využiť len vo Windows a v prostrediach, ktoré .NET Framework podporujú. • Managed C++ zavádza množstvo nových funkcií, ktoré sa nevyskytujú v štandardnom C++, a ktoré umožňujú zahrnúť do kódu prvky knižníc .NET Framework. • Managed C++ tiež umožňuje, aby program podliehal riadeniu pomocou .NET Framework, teda aby .NET Framework spravoval pamäť, ktorú program využíva, spracovával jeho výnimky a podobne. Ak je kód riadený pomocou .NET Framework, nemusíme napr. ručne robiť dealokácie, pamäť je dealokovaná automaticky bez nebezpečenstva memory leakov. Nevýhodou je menšia rýchlosť programu. • Kód napísaný v MS Visual C++ (.NET a vyššie) sa teda delí na dva typy: 1. Manažovaný (managed) – riadi ho .NET Framework 2. Prirodzený (native) – neriadi ho .NET Framework • Manažovaný a prirodzený kód sa dajú kombinovať, ale len do istej miery.
Tvorba aplikácií v MS Visual C++ • V MS Visual C++ je nasledujúca organizácia programov: 1. Súbor so zdrojovým kódom – obsahuje nejakú časť kódu alebo celý program 2. Projekt – vznikne združením viacerých súborov so zdrojovým kódom, je to už samostatná časť softvéru 3. Solution – kompletný softvér, ktorý sa môže skladať z viacerých projektov • Niektoré typy projektov, ktoré sa dajú vytvoriť vo VC++: 1. Console application – program s minimálnym užívateľským rozhraním 2. Windows forms application – program so štandardným windowsovským rozhraním 3. MFC application – aplikácia využívajúca prvky MFC (Microsoft Foundation Class), pomocou ktorých sa dá vytvoriť aj komplikovanejšie užívateľské rozhranie 4. DLL – dynamická knižnica 5. MFC ActiveX Control – nový ovládací prvok typu ActiveX ...
Tvorba aplikácií v MS Visual C++ • Vytvorenie jednoduchej aplikácie si názorne ukážeme na príklade. • Príklad: Objednávka limuzíny Vytvoríme program so štandardným windowsovským rozhraním, ktorý bude užívateľovi umožnovať objednať si limuzínu na určené miesto a čas. Užívateľské rozhranie bude obsahovať načítanie dátumu a hodiny, počtu hodín, voľbu typu limuzíny, zadanie mena a adresy zákazníka, voľbu občerstvenia počas cesty, obrázok zvoleného auta a výpočet ceny.
Tvorba aplikácií v MS Visual C++ • Najskôr si musíme zvoliť typ projektu. Vyberieme si Windows forms application:
Tvorba aplikácií v MS Visual C++ • Po vytvorení nového projektu vyzerá naša pracovná plocha približne takto:
Tvorba aplikácií v MS Visual C++ • Aplikácia typu Windows forms application pozostáva z komponentov, ktoré vytvárajú interface medzi užívateľom a programom a riadia priebeh programu. Komponenty sú teda všetky okná, textové a ovládacie prvky, ktoré vidíme a pomocou ktorých komunikujeme s programom. • Tvorba aplikácie pozostáva z troch častí: 1.Analýza a návrh štruktúry programu – predtým, ako začneme programovať, premyslíme si a navrhneme štruktúru kódu – triedy a objekty, ich vzájomnú komunikáciu, dedičnosť a polymorfizmus a podobne. 2.Návrh užívateľského rozhrania – najskôr si premyslíme, ako bude program komunikovať s užívateľom a aké ovládacie prvky bude potrebovať. Potom navrhneme interface. Visual C++ ponúka nástroje na dizajn rozhrania, vzhľad aplikácie môžeme navrhnúť jednoducho technikou drag and drop, vlastnosti každého komponentu nastavíme v špeciálnom panele vlastností. 3.Vytvorenie kódu, spracovanie udalostí – napíšeme samotný program. Program bude vlastne reagovať na jednotlivé udalosti vyvolané komponentami – stlačenie tlačítka, kliknutie alebo pohyb myšou, zmena obsahu a podobne.
Tvorba aplikácií v MS Visual C++ • 1. Návrh štruktúry Naša aplikácia je jednoduchá. V podstate len načíta objednávku a uloží ju do zoznamu objednávok. Budeme potrebovať len triedu Objednávka na uchovanie príslušných údajov a potom dynamické pole na uloženie objednávok. Vytvoríme si tiež triedu ČasovýÚdaj na uchovanie informácie o dátume a čase. • Triedy môžeme vytvárať manuálne, ale Visual C++ nám ponúka aj prostriedky, pomocou ktorých môžeme vytváranie tried čiastočne zautomatizovať. Pridajme do programu dve nové triedy – ČasovýÚdaj a Objednávka.
Tvorba aplikácií v MS Visual C++ • Vo Visual C++ môžeme vytvoriť množstvo typov tried, vyberieme si typ Generic C++ Class:
Tvorba aplikácií v MS Visual C++ • Zadáme názov novej triedy: CasovyUdaj. Visual C++ automaticky vytvorí hlavičkový súbor CasovyUdaj.h s definíciou triedy a zdrojový súbor CasovyUdaj.cpp, v ktorom budú definované jednotlivé metódy. Takto je zabezpečená prehľadnosť programu.
Tvorba aplikácií v MS Visual C++ • V hlavičkovom súbore CasovyUdaj.h je trieda ČasovýÚdaj preddefinovaná takto: class CasovyUdaj { public: CasovyUdaj(void); ~CasovyUdaj(void); }; • Doplníme do nej súkromné dáta: class CasovyUdaj { private: int rok,mesiac,den,hodina,minuta; public: CasovyUdaj(void); ~CasovyUdaj(void); };
Tvorba aplikácií v MS Visual C++ • Teraz do triedy ČasovýÚdaj doplníme aj metódy na nastavenie času a dátumu. Na to opäť môžeme využiť prostriedky Visual C++.
Tvorba aplikácií v MS Visual C++ • Doplníme metódu NastavČas(...) s parametrami h a m (hodina a minúta):
Tvorba aplikácií v MS Visual C++ • Rovnakým spôsobom potom doplníme metódu NastavDátum(...) s parametrami r, m, d (rok, mesiac, deň). Trieda ČasovýÚdaj bude nakoniec vyzerať takto: class CasovyUdaj { private: int rok,mesiac,den,hodina,minuta; public: CasovyUdaj(void); ~CasovyUdaj(void); void NastavDatum(int r, int m, int d); void NastavCas(int h, int m); };
Tvorba aplikácií v MS Visual C++ • Metódy NastavČas a NastavDátum definujeme v súbore CasovyUdaj.cpp: void CasovyUdaj::NastavDatum(int r, int m, int d) { rok=r; mesiac=m; den=d; } void CasovyUdaj::NastavCas(int h, int m) { hodina=h; minuta=m; }
Tvorba aplikácií v MS Visual C++ • Podobným spôsobom definujeme triedu Objednávka, ktorá bude vyzerať takto: class Objednavka { private: string meno, adresa; int typ, pocet_hodin, cena; bool obcerstvenie; CasovyUdaj cas; public: Objednavka(void); ~Objednavka(void); void NastavHodnoty(string m, string a, int t, int ph, int cn, bool o, CasovyUdaj cs); };
Tvorba aplikácií v MS Visual C++ • V súbore Objednavka.cpp definujeme metódu NastavHodnoty: void Objednavka::NastavHodnoty(string m, string a, int t, int ph, int cn, bool o, CasovyUdaj cs) { meno=m; adresa=a; typ=t; pocet_hodin=ph; cena=cn; obcerstvenie=o; cas=cs; }
Tvorba aplikácií v MS Visual C++ • Ešte potrebujeme dynamické pole pre uchovávanie objednávok a údaj o počte už prijatých objednávok. Tie definujeme ako súkromné dáta triedy Form1, ktorá predstavuje hlavné okno programu, teda samotnú aplikáciu. V hlavičkovom súbore Form1.h bude potom trieda Form1 definovaná takto: public __gc class Form1 : public System::Windows::Forms::Form //__gc znamená, že trieda je manažovaná { public: Form1(void) ... protected: void Dispose(Boolean disposing) ... private: System::ComponentModel::Container * components; void InitializeComponent(void) .. Objednavka *objednavky;//manažovaná trieda prijme len smerník int pocet_objednavok;//na objekt nemanažovanej triedy };
Tvorba aplikácií v MS Visual C++ • 2. Návrh užívateľského rozhrania Teraz navrhneme, ako bude aplikácia vyzerať a ako bude komunikovať s užívateľom. • Súčasťou prostredia Visual C++ je tzv. Toolbox, ktorý obsahuje množstvo preddefinovaných riadiacich prvkov (tlačítka, textové polia, menu atď.) My budeme pre náš program potrebovať tieto prvky: 1. Label – popisný text, ktorý budeme používať na opísanie funkcie niektorých prvkov 2. Button – tlačítko 3. TextBox – na zadávanie údajov
Tvorba aplikácií v MS Visual C++ • 4. DateTimePicker – prvok na zadávanie času a dátumu 5. CheckBox – na voľbu občerstvenia 6. ComboBox – na výber typu limuzíny z viacerých dostupných typov
Tvorba aplikácií v MS Visual C++ • 7. PictureBox – na zobrazenie vybranej limuzíny • 8. GroupBox – na zoskupenie prvkov do skupiny
Tvorba aplikácií v MS Visual C++ • Náš program bude mať len jedno okno, ktoré bude vyzerať takto:
Tvorba aplikácií v MS Visual C++ • Tu je popis jednotlivých prvkov: Label GroupBox TextBox ComboBox DateTimePicker Label PictureBox Label CheckBox Button
Tvorba aplikácií v MS Visual C++ • Ku každému prvku, aj k samotnému hlavnému oknu (Form1), patrí tzv. panel vlastností. Tu nastavíme rôzne vlastnosti daného prvku, napr. jeho meno, text, ktorý má byť na ňom vypísaný, vzhľad a podobne. Štandardne by mal byť viditeľný, ak ho nevidíme, zobrazíme si ho cez View/Properties Window. Sú na ňom zobrazené vlastnosti prvku, ktorý je práve označený.
Tvorba aplikácií v MS Visual C++ • V prípade našej aplikácie nastavíme vlastnosti jednotlivých prvkov takto (uvedené sú len tie ktoré sa zmenia oproti štandardnému nastaveniu): 1. FormForm1: Text : Najlepšie limuzíny s.r.o. 2. GroupBoxGroupZakaznik: Text : Zákazník 3. GroupBoxGroupLimuzina: Text : Limuzína 4. LabelLabelMeno: Text : Meno 5. TextBoxTextMeno: Text : 6. LabelLabelAdresa: Text : Adresa 7. TextBoxTextAdresa: Text:
Tvorba aplikácií v MS Visual C++ • 8. LabelLabelTyp: Text : Typ 9. ComboBoxComboTyp: Text : Items: Town Car Limo Chrysler 300 Navigator Rolls Royce Silver Cloud Bentley Touring Sedan 10. LabelLabelDatum: Text : Dátum 11. DateTimePickerPickerDatum: 12. LabelLabelCas: Text : Čas
Tvorba aplikácií v MS Visual C++ • 13. DateTimePickerPickerCas: Format : Time ShowUpDown : True 14. LabelLabelPocetHodin: Text : Počet hodín 15. TextBoxTextPocetHodin: Text : 0 TextAlign : Right 16. CheckBoxCheckObcerstvenie: Text : Občerstvenie 17. PictureBoxPictureLimuzina: 18. LabelLabelCena: Text : Cena/Skk 19. TextBoxTextCena: Text : 0 TextAlign : Right
Tvorba aplikácií v MS Visual C++ • 20. ButtonButtonVypocitajCenu: Text : Vypočítaj cenu 21. ButtonButtonPotvrdObjednavku: Text : Potvrď objednávku 22. ButtonButtonNovaObjednavka: Text : Nová objednávka 23. ButtonButtonKoniec: Text : Koniec
Tvorba aplikácií v MS Visual C++ • Posledná úprava vzhľadu nášho programu bude zmena ikony. Urobíme to v panele vlastností okna Form1: • Nová ikona sa volá Red.ico:
Tvorba aplikácií v MS Visual C++ • V hlavičkovom súbore Form1.h sa nové prvky automaticky objavia v triede Form1 private: System::Windows::Forms::GroupBox * GroupZakaznik; private: System::Windows::Forms::Label * LabelMeno; private: System::Windows::Forms::Label * LabelAdresa; private: System::Windows::Forms::GroupBox * GroupLimuzina; private: System::Windows::Forms::ComboBox * ComboTyp; private: System::Windows::Forms::DateTimePicker * PickerDatum; private: System::Windows::Forms::DateTimePicker * PickerCas; private: System::Windows::Forms::TextBox * TextPocetHodin; private: System::Windows::Forms::CheckBox * CheckObcerstvenie; private: System::Windows::Forms::Label * LabelTyp; private: System::Windows::Forms::Label * LabelDatum; private: System::Windows::Forms::Label * LabelCas; private: System::Windows::Forms::Label * LabelPocetHodin; private: System::Windows::Forms::PictureBox * PictureLimuzina; private: System::Windows::Forms::TextBox * TextCena; private: System::Windows::Forms::Label * LabelCena; private: System::Windows::Forms::Button * ButtonPotvrdObjednavku; private: System::Windows::Forms::Button * ButtonNovaObjednavka; private: System::Windows::Forms::Button * ButtonKoniec; private: System::Windows::Forms::TextBox * TextMeno; private: System::Windows::Forms::TextBox * TextAdresa; private: System::Windows::Forms::Button * ButtonVypocitajCenu;
Tvorba aplikácií v MS Visual C++ • 3. Spracovanie udalostí Teraz dopíšeme chýbajúcu časť kódu, teda to, ako bude program reagovať na udalosti, ktoré nastanú počas jeho behu. Vytvoríme teda celú hlavnú funkčnosť programu. • Jediné udalosti, na ktoré musí tento program reagovať, sú stlačenia tlačítiek a výber typu limuzíny pomocou comboboxu(vtedy sa zjaví jej obrázok). • Funkcia, ktorá spracúva stlačenie tlačítka, sa automaticky vytvorí, ak pri dizajnovaní okna dvakrát klikneme na tlačítko. Táto funkcia sa objaví ako súkromná metóda triedy Form1: private: System::Void ButtonVypocitajCenu_Click(System::Object * sender, System::EventArgs * e) { }
Tvorba aplikácií v MS Visual C++ • Napíšme teda funkciu ButtonVypocitajCenu_Click : private: System::Void ButtonVypocitajCenu_Click(System::Object * sender, System::EventArgs * e) { int cena; int ceny[5]={2000, 3000, 5000, 4000, 3500}; cena=TextPocetHodin->Text->ToInt32(0)*ceny[ComboTyp->SelectedIndex]; if (CheckObcerstvenie->Checked==1) cena+=1000; TextCena->Text=cena.ToString("D"); } • TextBox->Text – text, ktorý sa objaví v text boxe ToInt32(0) – funkcia, ktorá prevedie premennú na 32-bitový int. Parameter 0 znamená, že výsledok sa neformátuje. ComboBox->SelectedIndex – index prvku, ktorý bol zvolený v combo boxe CheckBox->Checked – parameter, ktorý udáva, či bolo políčko v check boxe zaškrtnuté (0 alebo 1) ToString("D") – funkcia, ktorá prevedie premennú na String. „D" znamená formát “decimal”, t.j. číslo v desiatkovej sústave.
Tvorba aplikácií v MS Visual C++ • Teraz napíšeme funkciu ButtonPotvrdObjednavku_Click. Úlohou tejto funkcie bude uložiť údaje zadané v okne do objektu triedy Objednávka a potom uložiť vytvorený objekt do poľa objednávok. • Aby sme mohli robiť operácie s poľom objednávok, musíme ho najprv alokovať, keďže zatiaľ máme vytvorený len smerník. Urobíme to v konštruktore triedy Form1: Form1(void) { objednavky=new Objednavka[100]; pocet_objednavok=0; InitializeComponent(); } • Ďalej budeme potrebovať ešte jednu novú triedu. Údaj, ktorý načítame z prvku TextBox, je typu String, čo je špeciálny typ Managed C++. My máme v našej triede Objednávka údaje typu string štandardného C++, preto budeme potrebovať funkciu na prevod Stringu na string. Vytvoríme si novú triedu Pomôcky a v nej bude zatiaľ jediná metóda – StringNastring.
Tvorba aplikácií v MS Visual C++ • Takto bude vyzerať trieda Pomôcky: class Pomocky { public: Pomocky(void); ~Pomocky(void); string StringNastring(String __gc *s); }; string Pomocky::StringNastring(String __gc *s) { using namespace Runtime::InteropServices; const char* chars=(const char *) (Marshal::StringToHGlobalAnsi(s)).ToPointer(); string s1=chars; Marshal::FreeHGlobal(IntPtr((void*)chars)); return s1; }
Tvorba aplikácií v MS Visual C++ • Teraz môžeme napísať funkciu ButtonPotvrdObjednavku_Click : private: System::Void ButtonPotvrdObjednavku_Click(System::Object * sender, System::EventArgs * e) { Objednavka o; CasovyUdaj c; Pomocky pom; c.NastavCas(PickerCas->Value.Hour,PickerCas->Value.Minute); c.NastavDatum(PickerDatum->Value.Year,PickerDatum-> Value.Month, PickerDatum->Value.Day); o.NastavHodnoty(pom.StringNastring(TextMeno->Text), pom.StringNastring(TextAdresa->Text), ComboTyp->SelectedIndex, TextPocetHodin->Text->ToInt32(0), TextCena->Text->ToInt32(0), CheckObcerstvenie->Checked, c); objednavky[pocet_objednavok]=o; pocet_objednavok++; }
Tvorba aplikácií v MS Visual C++ • Teraz si vysvetlíme neznáme príkazy a názvy: DateTimePicker->Value – táto štruktúra (objekt) obsahuje údaje o čase, ktorý je nastavený v prvku DateTimePicker. Sú v nej údaje ako napr. Year - nastavený rok Month – mesiac Day - deň v mesiaci Hour – hodina Minute – minúta Second – sekunda a ďalšie.
Tvorba aplikácií v MS Visual C++ • Ďalšou funkciou, ktorú napíšeme, bude funkcia ButtonNovaObjednavka_Click. Tu ide len o to, aby sa vynulovali všetky hodnoty, prípadne nastavili na nejaké počiatočné hodnoty. private: System::Void ButtonNovaObjednavka_Click(System::Object * sender, System::EventArgs * e) { TextMeno->Text=""; TextAdresa->Text=""; ComboTyp->SelectedIndex=-1; PickerDatum->Value=DateTime::Today; PickerCas->Value=DateTime::Now; TextPocetHodin->Text=""; CheckObcerstvenie->set_Checked(0); TextCena->Text=""; } • DateTime::Today – obsahuje dnešný dátum DateTime::Now – obsahuje aktuálny čas CheckBox->set_Checked(0) – nastaví políčko tak, aby nebolo zaškrtnuté
Tvorba aplikácií v MS Visual C++ • Nakoniec napíšeme funkciu ButtonKoniec_Click. Tá len ukončí program. private: System::Void ButtonKoniec_Click(System::Object * sender, System::EventArgs * e) { Close(); } • Zostáva nám spracovať prípad, keď sa v combo boxe zvolí nejaký typ limuzíny. Vtedy by sa mal v picture boxe zobraziť obrázok vybraného auta. • Tento raz nebude program reagovať na kliknutie myšou, ale na zmenu vybranej položky. V paneli vlastností combo boxu klikneme na udalosť SelectedIndexChanged:
Tvorba aplikácií v MS Visual C++ • Teraz napíšeme funkciu ComboTyp_SelectionIndexChanged : private: System::Void ComboTyp_SelectedIndexChanged(System::Object * sender, System::EventArgs * e) { Bitmap __gc *image; //bitmapový obrázok switch (ComboTyp->SelectedIndex) { case 0: image=new Bitmap("TownCarLimo.jpg",true); break; case 1: image=new Bitmap("Chrysler300Limo.jpg",true); break; case 2: image=new Bitmap("Navigator.jpg",true); break; case 3: image=new Bitmap("RollsRoyceSilverCloud.jpg",true); break; case 4: image=new Bitmap("BentleyTouringSedan.jpg",true); break; } this->PictureLimuzina->set_Image(image); //zobrazenie obrázku }
Tvorba aplikácií v MS Visual C++ • Nakoniec nám už len zostáva náš program spustiť a vyskúšať: