Image
22.6.2016 0 Comments

C++ pod Windows / AppWizard a tvorenie aplikácie / 6. časť

Späť na úvod >> Späť na programovanie >> Späť na seriál

Silvestra a Vianoce máme za sebou, dúfam, že ste plní sily a energie do nového roku a že ste si dali veľa predsavzatí, ktoré hodláte aj splniť. Nech vám to teda vyjde a dúfam, že vám pri tom pomôže aj PC REVUE. A ako to vyzerá so seriálom C++ pod Windows? Dobre . No ale teraz vážne. V predošlom pokračovaní sme si vysvetlili základné časti prostredia Visual C++ a spôsob zostavovania aplikácie v ňom. Všetko od editácie kódu až po výstupný EXE súbor. Teraz si podrobnejšie opíšeme, ako sa s jednotlivými súčasťami prostredia Visual C++ pracuje a vytvoríme našu prvú „skutočnú“ aplikáciu s využitím App Wizardu. Samozrejmosťou sú aj ďalšie linky na zaujímavé stránky, ktorých obsah sa týka práve jazykov C/C++ a na ktorých nájdete obrovské množstvo rôznych tipov, trikov a rád, ako môžete vyvíjať svoj vlastný softvér. A ako z poradového čísla tejto časti môžete usúdiť, ide už o šieste pokračovanie seriálu, čo znamená, že sa už stretávame pol roka. Ako sa tak pozerám na to, čo sme doposiaľ prebrali, asi ešte neviete písať veľmi schopné aplikácie, ale tie teoretické veci, čo sme si vysvetľovali, sú naozaj veľmi dôležité a bez nich by ste asi veľmi ťažko pochopili problematiku programovania v jazyku C++ pod operačným systémom Windows. Rád vám teraz oznamujem, že od tejto časti bude tých „suchých“ teoretických informácií čoraz menej a budeme sa venovať najmä praktickej stránke tvorenia aplikácie a vaše schopnosti písať užitočné aplikácie budú s každým pokračovaním seriálu narastať. Tak sa do toho pusťme!

Document/View architecture

Na začiatok predsa len trocha teórie. Architektúra nazývaná Document/View tvorí jadro aplikačného systému. Pomocou nej sú v aplikácii oddelené údaje a používateľov pohľad na tieto údaje. Pre jednoduchosť si predstavte údaje zapísané v tabuľke Excelu. Na jeden list môžete umiestniť tieto údaje zapísané klasicky vo forme čísel a   tie isté údaje vo forme grafu. Vznikla vám situácia, keď na rovnaký údaj existujú dva rôzne pohľady. Práve v tom je veľká výhoda tejto architektúry. Stačí vám totiž zadefinovať jeden dokument a potom vytvárať rôzne pohľady na údaje v ňom zapísané, bez ich nevyhnutnej editácie. Rovnako nad dokumentom robíme operácie, ako sú otvoriť súbor, zapísať súbor a pod. Knižnica MFC nám poskytuje veľmi komfortné prostriedky na spravovanie dokumentov a pohľadov v našich aplikáciách. Zatiaľ budeme pracovať len s pohľadom, k zložitejším dokumentom sa dostaneme neskôr.

Prvá aplikácia

Konečne sme sa dostali až k tvorbe našej prvej aplikácie v prostredí Visual C++. Nazvime ju jednoducho Hi. Nasledujúci step-by-step opis sa bude týkať Visual C++ verzie 6.0, ale dá sa aplikovať aj na nižšie verzie. Bude sa skladať z ôsmich bodov, pričom samotné kroky AppWizardu tvoria kroky 2-7. Tak teda vyčistite myšky, pripravte klávesnicu, ideme na to!

Krok 1: Predpokladám že už máte spustené prostredie Visual C++. Kliknite na File a vyberte New. Zvoľte záložku Projects a vyplňte údaje, tak ako vidíte na obr. 1

Keď ste vyplnili tieto údaje, kliknite na OK. Visual C++ automaticky vytvorí adresár zadaný v políčku Location s podadresárom, ktorý má názov vašej aplikácie. V našom prípade vytvorí: C:\Seriál\Hi. V tomto adresári budú uložené všetky súbory, ktoré váš projekt potrebuje (*.cpp, *.h, *.rc...).

Krok 2: Po kliknutí na OK sa objaví dialóg (prvý dialóg AppWizardu), aký môžete vidieť na obr. 2 (pravdepodobne však bude implicitne prednastavená voľba Multiple documents).

Zvoľte teda Single document. Je to v súvislosti práve s Document/View architektúrou, takže vás to teraz nemusí trápiť, dostaneme sa k tomu neskôr. Pokračovať môžete, ak kliknete na Next.

Krok 3: Objaví sa ďalší dialóg, ako vidíte na obr. 3, v ktorom si volíme, či a akú podporu pre databázy bude mať naša aplikácia. V tomto dialógu nechajte všetky pôvodné nastavenia a opäť kliknite na Next.

Krok 4: Dialóg, aký vidíte na obr. 4, ponúka nastavenia týkajúce sa architektúry klient/server, automatizácie OLE a ActiveX komponentov. Nechajte všetko na pôvodnom nastavení a kliknite na Next.

Krok 5: Na tomto dialógu (obr. 5) môžete meniť niektoré z vizuálnych vlastností aplikácie, ako nastavenie toolbarov, niektorých položiek menu. V dolnej časti dialógu vidíte tlačidlo Advanced. Keď naň kliknete, budete môcť zmeniť napríklad príponu súborov, štýly okien a pod. Nechajte všetko tak, ako je, a opäť kliknite na Next.

Krok 6: V tomto dialógu (obr. 6) nastavujete štýl projektu a vygenerovanie pomocných komentárov (to sú tie známe //TODO, pozri ďalej v tejto časti). Nechajte MFC Standard a nechajte vygenerovať komentáre. Kliknite na Next.

Krok 7: Objaví sa  posledný dialóg AppWizardu (obr. 7), na ktorom máte podrobný prehľad o vytváraných triedach, o ich základných triedach a názvoch súborov. Názvy tried a súborov našej aplikácie sa implicitne generujú podľa nami zadaného mena aplikácie. Tieto informácie môžete pri niektorých triedach aj meniť, ale pre naše potreby stačia aj prednastavené hodnoty. Kliknite na Finish.

Obr. 1 Začiatok tvorenia MFC aplikácie

Obr. 2 Prvý krok tvorenia aplikácie pomocou AppWizardu

Obr. 3 Druhý krok tvorenia aplikácie pomocou AppWizardu

Obr. 4 Tretí krok tvorenia aplikácie pomocou AppWizardu

Obr. 5  Štvrtý krok tvorenia aplikácie pomocou AppWizardu

Obr. 6 Piaty krok tvorenia aplikácie pomocou AppWizardu

Obr. 7 Šiesty a posledný krok tvorenia aplikácie pomocou AppWizardu

Obr. 8 Informačný dialóg AppWizardu  o novom projekte

Obr. 9 Výstup aplikácie Hi

Krok 8: Tu vám Visual C++ ponúka ešte posledný pohľad na to, čo vlastne vytvárate (obr. 8).

Po kliknutí na OK a krátkej chvíli, ktorá je potrebná na generovanie súborov, máte vygenerovanú základnú a úplne funkčnú kostru aplikácie. Skúste len tak pre zaujímavosť skompilovať a spustiť túto aplikáciu. Ako môžete vidieť, ide skutočne o úplne funkčnú aplikáciu, so všetkým, čo k takejto aplikácii patrí: menu, panel nástrojov (toolbar), stavový riadok (status bar). Trošku ju preskúmajte, skúšajte rôzne položky menu, aby ste prišli na to, ako pracuje. Všetko toto ste zvládli bez jediného riadka kódu!

Vygenerované súbory

Teraz sa pozrite do adresára C:\Seriál\Hi. Je tam niekoľko súborov, ktoré nám AppWizard vygeneroval. AppWizard vytvoril štyri triedy pre našu aplikáciu, ktoré odvodil od základných tried knižnice MFC.

1.   Triedu aplikácie – je odvodená od triedy CWinApp knižnice MFC. Pri generovaní aplikácie sa vytvorí na základe tejto triedy objekt odvodený od triedy CWinApp. Je to základný objekt celej aplikácie (pozri program First).

2.   Triedu hlavného okna – jej názov je vždy CMainFrame (nezáleží teda na mene vašej aplikácie). Táto trieda býva odvodená od triedy MFC CFrameWnd (pri aplikáciách Single document) alebo od triedy CMDIFrameWnd (pri aplikáciách Multiple documents).

3.   Triedu dokumentu – je odvodená od triedy MFC CDocument. Táto trieda obsahuje členské funkcie pre prácu s dokumentmi, ako je načítanie a ukladanie dát.

4.   Triedu pohľadu – je odvodená od triedy MFC CView. Takto vytvorený pohľad je pripojený k objektu dokumentu, ktorý bol vytvorený od triedy CDocument a pomáha zobraziť údaje z dokumentu.

V nasledujúcich častiach sa s ňou podrobnejšie oboznámime.

Je dôležité aspoň informačne vedieť, čo sa v ktorom  súbore nachádza. Ak totiž budete nechávať mená súborov vždy implicitné (čo vám hlavne zo začiatku veľmi odporúčam), tak ako vám ponúka AppWizard, ich mená sa budú meniť len v závislosti od mena aplikácie, ale napríklad názov súboru obsahujúci slovo View bude vždy súborom pohľadu a názov obsahujúci Doc bude vždy súborom dokumentu. Napríklad predstavte si aplikáciu Pokus. Mená súborov obsahujúcich pohľad  by boli PokusView.cpp, resp. PokusView.h a mená súborov obsahujúcich dokument by boli PokusDoc.cpp, resp. PokusDoc.h. Pri našej aplikácii Hi sa tieto súbory volajú pre pohľad HiView.cpp, resp. HiView.h a pre súbor dokumentu HiDoc.cpp, resp. HiDoc.h. Ako vidíte, závisí len od mena aplikácie, ostatné ostáva rovnaké. V tabuľke 1 máte opis najdôležitejších súborov aplikácie Hi a ich obsahu.

Súbor

Opis

Hi.cpp

Zdrojový súbor triedy CHiApp aplikácie Hi

Hi.h

Hlavičkový súbor triedy CHiApp aplikácie Hi

HiView.cpp

Zdrojový súbor triedy CHiView aplikácie Hi

HiView.h

Hlavičkový súbor triedy CHiView aplikácie Hi

HiDoc.cpp

Zdrojový súbor triedy CHiDoc aplikácie Hi

HiDoc.h

Hlavičkový súbor triedy CHiDoc aplikácie Hi

Mainfrm.cpp

Zdrojový súbor triedy CMainFrame aplikácie Hi

Mainfrm.h

Hlavičkový súbor triedy CMainFrame aplikácie Hi

Hi.rc

Definuje všetky zdroje (menu, dialógy...)

Hi.res

Skompilovaná verzia súboru Hi.rc

Resource.h

Textový súbor obsahujúci identifikátory priradené zdrojom aplikácie Hi

Stdafx.h

Hlavičkový súbor, do ktorého sa umiestňujú hlavne direktívy #include

a takto sa vkladajú hlavičkové súbory knižnice MFC

Stdafx.cpp

Zdrojový súbor doplňujúci hlavičkový súbor Stdafx.h. Pri kompilácii sa z

týchto dvoch súborov vytvorí predkompilovaný súbor Hi.pch, ktorý značne urýchľuje

neskorší preklad (nekompilujú sa nezmenené časti kódu, ale len tie zmenené)

Tab. 1 Opis dôležitých súborov programu Hi

Pohľad – View

Ako som už spomenul v úvode, najprv začneme pracovať s pohľadom. Pohľad (View) sa javí z pohľadu používateľa ako okno. Toto okno sa správa ako hociktoré iné, môžeme meniť jeho veľkosť, zatvoriť ho, minimalizovať... Z nášho pohľadu (teda z pohľadu knižnice MFC) je pohľad objekt triedy odvodenej od triedy pre pohľady CView. Vlastnosti tohto objektu nastavujeme ako v každej aplikácii využívajúcej objekty pomocou členských funkcií tejto triedy. Samozrejme, platia všetky pravidlá OOP programovania. Dedičnosť je úplne samozrejmá a bez nej by nebola nijaká MFC. Rovnako aj polymorfizmus sa využíva pomerne často.

Trieda pohľadu: AppWizard nazval našu triedu pohľadu CHiView. Ako si môžete v zdrojovom kóde tejto triedy pozrieť, je odvodená od spomínanej triedy CView. Ak chcete vidieť kompletnú hierarchiu tried MFC, pozrite si help, ale upozorňujem vás, že je to obrovské množstvo informácií, a ak ste si ešte nie istí v tom, čo robíte, mohlo by vás to mierne popliesť. Existujú akési „základné“ triedy MFC, ale o tom nabudúce.

Kreslenie do pohľadu

Aby sme mohli do okna aj niečo kresliť, musíme si osviežiť a rozšíriť naše vedomosti o kontexte zariadení. Ako iste s prechádzajúcich častí viete, je to akýsi „medzistupeň“ pre komunikáciu našej aplikácie s hardvérom počítača. V knižnici MFC predstavuje kontext zariadení objekt triedy CDC. Obyčajne deklarujeme ukazovateľ na tento objekt a pomocou neho pristupujeme k jednotlivým členským funkciám triedy CDC. Opäť existuje veľa tried, ktoré sú odvodené od základnej triedy CDC. Spomeniem napríklad CPaintDC, ktorej použitie ste mohli vidieť v tretej časti seriálu, ďalej napríklad CClientDC, čo predstavuje klientske okno, a ďalšie. Samozrejme, že všetky tieto odvodené triedy zdedia funkcie triedy CDC (samozrejme, zachovávajú sa pravidlá dedičnosti a platia špecifikátory prístupu: public, private a protected).

Najdôležitejšou funkciou, ktorá sa zúčastňuje na kreslení do okna, je OnDraw. Je to virtuálna členská funkcia triedy CView a je volaná vždy, keď je potrebné prekresliť okno (už sme uviedli, kedy je to potrebné).  Nachádza sa aj v našom súbore triedy pohľadu: HiView.h, keďže túto funkciu je potrebné „preťažiť“ (override) na nakreslenie nášho pohľadu.

Aby naša aplikácia aj niečo robila, musíme dopísať nejaké veci do súboru HiView.cpp. Otvorte teda tento súbor a nájdite v ňom funkciu OnDraw. Jej kód bude vyzerať takto:

void CHiView::OnDraw(CDC* pDC)
{
      CHiDoc* pDoc = GetDocument();
      ASSERT_VALID(pDoc);
      // TODO: add draw code for native data here
}

Ako vidíte, sama aplikácia nás upozorňuje, že tu môžeme pridávať naše vlastné veci ( //TODO: add draw code for native data here). Hneď v hlavičke funkcie vidíme spomínaný ukazovateľ na objekt triedy CDC, ktorý nám hneď aj príde vhod, lebo pomocou neho budeme pristupovať k členským funkciám tejto triedy. Pridajte nasledujúci kód do funkcie OnDraw:

CRect rectMax;
// získa rozmery klientskeho okna
GetClientRect(rectMax);
// vpíše do pohľadu text
 pDC->TextOut(0, 0, "Hello, world!");
// nastaví objekt systémového zásobníka ako aktuálny GDI objekt
pDC->SelectStockObject(GRAY_BRUSH);
// nakreslí do pohľadu elipsu a použije pritom objekt systémového zásobníka
pDC->Ellipse(rectMax);

Teraz aplikáciu skompilujte a spusťte. Ak ste neurobili chybu, výstup aplikácie by mal byť rovnaký, ako vidíte na obr. 9.

Funkcie TextOut, SelectStockObject Ellipse sú členskými funkciami triedy CDC, preto k nim pristupujeme pomocou ukazovateľa na objekt triedy CDC a ním je pDC. Tento ukazovateľ je parametrom funkcie OnDraw. No povedzte, nebolo to pohodlnejšie ako písanie niekoľko desiatok riadkov v programe First z tretej časti? A pritom program First nemal menu, toolbar ani iné veci, ktoré naša aplikácia obsahuje. A to všetko napísaním len ôsmich riadkov kódu (vrátane komentárov). Je síce pravda, že aplikácia Hi nepoužíva objekt pera, ale pre jednoduchosť iba GDI objekty systémového zásobníka, no nejakú zmenu treba. Ak chcete, aby vykonávala takú istú činnosť ako program First, modifikujte funkciu OnDraw. Ako? To vám zostáva na domácu úlohu . Nabudúce sa k tomu vrátime, ale je to skutočne veľmi jednoduché a mali by ste to zvládnuť aj sami.

Tipy na WWW

Tu máte ďalšie dobré linky na stránky, ktoré sa zaoberajú programovaním v jazykoch  C/C++. http://www.progsharehouse.com/index.pl – vynikajúca stránka. Doslova tony informácií.

http://www.redrival.com/bigt/ – opisuje základy programovania a milovníci grafiky si takisto prídu na svoje.

http://www.kbcafe.com/ – ak ste trochu pokročilí, je táto stránka práve pre vás. Nájdete tu rôzne tutorialy a on line knihy.

http://www.microsoft.com/– pýtate sa, čo tu robí táto stránka? Firma Microsoft je predsa výrobcom prostredia Visual C++, tak kde hľadať lepšie informácie o tomto prostredí? Informácie získate v časti Developer Tools. Rovnako v Download Centre, ak zadáte produkt Visual C++ 6.0, môžete získať nejaké zdrojové texty, prípadne nejaké update.

Tipy na doma

Doma skúste generovať pomocou AppWizardu vlastné aplikácie, zmeňte niektoré nastavenia, aby ste prišli na to, čo ktoré nastavenie znamená (nemeňte však nastavenia databáz a nenastavujte generovanie Multiple documents aplikácie, zbytočne by vás to doplietlo). Rovnako skúste zmeniť aj aplikáciu Hi, aby robila to isté, čo aplikácia First z tretej časti.

Nabudúce

Dúfam, že som touto časťou uspokojil tých, ktorí sa dožadovali zväčšenia rozsahu jednotlivých častí. Nabudúce si opíšeme prácu s ClassWizardom a pomocou neho pridáme do aplikácie Hi spracúvanie základných správ. Opíšeme si aj „základné“ triedy knižnice MFC. Teším sa na stretnutie opäť o mesiac.

Zobrazit Galériu

Nechajte si posielať prehľad najdôležitejších správ emailom

Mohlo by Vás zaujímať

Ako na to

Tipy a triky: Ako na snímku obrazovky na akomkoľvek počítači s Windows?

02.12.2016 00:13

Ak snímky obrazovky robíte často apotrebujete napríklad funkcie na posun stránok alebo snímanie zobrazenia pri vyššom rozlíšení displeja, zrejme používate nejakú špecializovanú aplikáciu. Väčšina použ ...

Ako na to 1

Tipy a triky: Ako aplikácii prednastaviť spúšťanie s administrátorskými právami?

30.11.2016 00:10

Väčšina aspoň trochu skúsenejších používateľov vie, že aj keď máte na operačnom systéme Windows vytvorený administrátorský účet, aplikácie pre bezpečnosť nefungujú vždy splnými administrátorskými práv ...

Ako na to 2

Tipy a triky: Ako vypnúť uzamykaciu obrazovku vo Windows 10?

29.11.2016 00:10

Rozčuľuje vás, že pred každým prihlásením doúčtu vášho počítača musíte prejsť uzamykacou obrazovkou? Windows 10 na tejto obrazovke ukazuje čas,dátum anejakú zaujímavú fotografiu zrôznych kútov sveta. ...

Žiadne komentáre

Vyhľadávanie

Kyocera - prve-zariadenia-formatu-a4-s-vykonom-a3

Najnovšie videá