11.07.2015 Views

Untitled - Vitajte na stránkach www.einsty.hostujem.sk

Untitled - Vitajte na stránkach www.einsty.hostujem.sk

Untitled - Vitajte na stránkach www.einsty.hostujem.sk

SHOW MORE
SHOW LESS
  • No tags were found...

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

P R O G R A M U J E M Evygeneroval. Tieto súbory v minulosti slúžili ako základné súbory celého projektu, v nich sadefinovali všetky vz ahy medzi zdrojovými súbormi. Momentálne sa ve¾mi nepoužívajú, a akpredsa, slúžia len pre <strong>sk</strong>utoèných odborníkov a my sa nimi nebudeme zapodieva (ak aj, taklen vo „vyšších“ pokraèovaniach seriálu). V terajšej dobe <strong>na</strong>hradil ich funkciu tzv. súbor projektu(project file). Je to súbor s príponou DSP a plní rov<strong>na</strong>kú funkciu ako súbory makefile(uvažujeme prostredie Visual C++). A ako vlastne prebieha kompletný proces zostavovaniacelej aplikácie? Pozrite si obrázok 1. Myslím, že nepotrebuje komentár.Typy súborov a súèasti Visual C++Aby ste lepšie pochopili, aké typy súborov sa vo Visual C++ generujú, uvedieme si ichstruèný opis a vysvetlíme si aj to, aké súèasti Visual C++ ich vytvárajú.Editor a prehliadaè zdrojov: „Zdrojom“ sa vo Windows aplikáciách oz<strong>na</strong>èuje tá èas vašejaplikácie – projektu, ktorú nemusíte programova len zadávaním nekoneèného množstva kódu,ale zvyèajne ju <strong>na</strong>vrhujete vizuálne, práve v editori zdrojov. Príkladom zdroja sú <strong>na</strong>príkladikony, bitmapy, menu, akcelerátory (klávesové <strong>sk</strong>ratky), dialógy. Každý projekt obyèajneobsahuje aspoò jeden textový súbor <strong>sk</strong>riptov zdrojov (tu sú zadefinované zdroje vašej aplikácie).Tento súbor má príponu RC, èo je <strong>sk</strong>ratka z resource script file. K vytváraniu súborovzdrojov sa dostaneme ne<strong>sk</strong>ôr.Kompilátor zdrojov: Preèíta textový súbor <strong>sk</strong>riptov zdrojov (RC) a zapisuje binárnyRES súbor pre linker.Kompilátor C/C++: Kompiluje zdrojový kód (medzi jazykmi C a C++ rozlišuje pomocouprípony súboru. Ak *.c, použije sa kompilátor pre jazyk C, ak *.cpp, resp *.cxx, použijesa kompilátor jazyka C++) a vytvára súbory s príponou OBJ.Linker: Preèíta súbory s príponou OBJ a RES, ktoré vytvoril kompilátor C/C++ a kompilátorzdrojov a s pomocou LIB súborov knižnice MFC, knižnice runtime a Windows kóduvytvára spustite¾ný EXE súbor. Samozrejmos ou je využitie tzv. inkrementálneho linkovania, èominimalizuje èas potrebný <strong>na</strong> opakované linkovanie kódu, v ktorom sme urobili malé zmeny.App Wizard: Je to generátor kódu, ktorý vytvára funkènú kostru aplikácie. Taktovygenerovaná aplikácia má minimálnu funkènos a slúži len ako základ <strong>na</strong> pridávanieObr. 1 Proces zostavovania aplikácie vo Visual C++ïalších prvkov. Ako bude vyzera táto „minimál<strong>na</strong> funkènos “, to si volíme v dialógochpri generovaní aplikácie pomocou App Wizardu. Jeho konkrétne použitie si vysvetlíme<strong>na</strong>budúce.Class Wizard: Tento program nám u¾ahèuje udržiavanie poriadku v kóde a triedach. Ak potrebujemenovú triedu èi obslúži nejakú správu, robíme tak vždy pomocou Class Wizardu. Vyhnemesa tak mnohým problémom s integritou celej aplikácie. Jeho konkrétne použitie si rov<strong>na</strong>kovysvetlíme <strong>na</strong>budúce.Source Browser: Tento nástroj nám u¾ahèuje vôbec vyz<strong>na</strong> sa v zdrojovom kóde.Umožòuje nám editova aplikáciu nie z poh¾adu súborov, ale z poh¾adu tried a funkcií.Pracuje vo viacerých režimoch, opis nájdete v helpe. Ja vám odporúèam vypnú ho, jed<strong>na</strong>kako zaèiatoèníci sa v òom asi ažko vyznáte, jed<strong>na</strong>k z<strong>na</strong>ène spoma¾uje proceszostavovania aplikácie, keïže generuje dos ve¾ký súbor (*.bsc). Vypnú ho môžete takto:Z menu Project vyberte Settings..., kliknite <strong>na</strong> záložku Browse Info a odškrtnite položku:Build browse info file. Rov<strong>na</strong>ko <strong>na</strong> karte C/C++ odškrtnite položku Generate browse info.(platí pre verziu Visual C++ 6.0). Keï budete písa také zložité aplikácie, že vám buderobi problém vyz<strong>na</strong> sa vo svojom zdrojovom kóde, alebo keï preberiete nejaký projektod svojho kolegu, aby ste sa s ním oboznámili, má použitie Source browsera svoje opodstatnenie,i<strong>na</strong>k nie.Debugger: Predpokladám, že každému z vás je pojem debugger jasný. Tento programmôže èasto predstavova poslednú záchranu z beznádejnej situácie. A samozrejme, ženesmie chýba v takom prostredí, ako je Visual C++. Len v struènosti: debugger VisualC++ obsahuje všetky štandardne používané prvky – krokovanie programu, <strong>na</strong>staveniebodov prerušenia a podobne. Odporúèam vám dobre sa oboznámi s prostredím debuggera,lebo pri vývoji aplikácií ho budete èasto potrebova . Napíšte si nejaký jednoduchý„programík“ (nemusí to by program pod Windows) a potom si ho vy<strong>sk</strong>úšajte odkrokova, sledujte hodnoty premenných...Zodpovedajúca èlen<strong>sk</strong>áSpráva Windows funkcia knižnice MFC OpisWM_CHAR OnChar Reaguje <strong>na</strong> udalos , spôsobenú <strong>na</strong> klávesniciWM_CLOSE OnClose Vymaže okno a uzavrie hoWM_CREATE OnCreate Vytvorenie ok<strong>na</strong>WM_DESTROY OnDestroy Zrušenie ok<strong>na</strong>WM_ERASEBKGND OnEraseBkgnd Obnovenie pozadia ok<strong>na</strong>WM_HSCROLL OnHScroll Kliknutie <strong>na</strong> horizontálny posuvníkWM_VSCROLL OnVScroll Kliknutie <strong>na</strong> vertikálny posuvníkWM_KEYDOWN OnKeyDown Stlaèenie klávesuWM_KEYUP OnKeyUp Uvo¾nenie klávesuWM_LBUTTONDBLCLK OnLButtonDblClk „Dvojklik“ <strong>na</strong> ¾avom tlaèidle myšiWM_RBUTTONDBLCLK OnRButtonDblClk „Dvojklik“ <strong>na</strong> pravom tlaèidle myšiWM_LBUTTONDOWN OnLButtonDown Stlaèenie ¾avého tlaèidla myšiWM_RBUTTONDOWN OnRButtonDown Stlaèenie pravého tlaèidla myšiWM_LBUTTONUP OnLButtonUp Uvo¾nenie ¾avého tlaèidla myšiWM_RBUTTONUP OnRButtonUp Uvo¾nenie pravého tlaèidla myšiWM_MOVE OnMove Presun ok<strong>na</strong>WM_SETFOCUS OnSetFocus Okno sa stalo aktívnym (dostalo focus)WM_SHOWWINDOW OnShowWindow Zobrazenie/ukrytie ok<strong>na</strong>WM_SIZE OnSize Zme<strong>na</strong> ve¾kosti ok<strong>na</strong>WM_TIMER OnTimer Vypršanie èasu <strong>na</strong>staveného v èasovaèiTab. 2Zoz<strong>na</strong>m <strong>na</strong>jèastejšie používaných funkcií <strong>na</strong> obsluhu konkrétnych správsystému WindowsMapovanie správ v knižnici MFCUž viete, ako sa aplikácia zostavuje, aké sú hlavné súèasti prostredia Visual C++, teraz savrá me k príkladu First z predchádzajúcej èasti. Ako vlastne pracuje systém spracúvania správv aplikácii, ktorá využíva knižnicu MFC? Na zaèiatku musíme ešte doplni vaše vedomostio správach. Už sme sa o nich zmienili, ale ešte sme si ich nerozde¾ovali. Rozlišujeme tri základnédruhy správ v systéme Windows. Prvým typom, s ktorým sme sa už stretli, sú tzv. štandardnésprávy. Zaèí<strong>na</strong>jú sa prefixom WM. Príkladom sú <strong>na</strong>pr. správy WM_PAINT, WM_LBUT-TONDOWN, WM_TIMER a podobne. Týchto správ je drvivá väèši<strong>na</strong>. Druhým typom sú príkazovésprávy. Tie reagujú <strong>na</strong> používate¾ov príkaz, ktorý vydal buï kliknutím <strong>na</strong> položku v menu,<strong>na</strong> panel nástrojov alebo <strong>na</strong> nejaký iný ovládací prvok, alebo keï používate¾ stlaèil <strong>sk</strong>ratkovýkláves. Tieto správy sa zaèí<strong>na</strong>jú rov<strong>na</strong>ko prefixom WM, ale za ním musí <strong>na</strong>sledova ešte COM-MAND, takže príkazová správa vyzerá: WM_COMMAND. Tretím typom správ sú notifikaènéalebo aj informaèné správy. Tieto správy využívajú pre seba hlavne ovládacie prvky a dcér<strong>sk</strong>eokná (èo to je, si povieme ne<strong>sk</strong>ôr), aby dali svojmu rodièov<strong>sk</strong>ému oknu vedie , že sa zmenil ichstav. Napríklad keï zmeníte text v textovom poli, ono pošle správu EN_CHANGE, aby oznámilo,že sa nieèo udialo, a je <strong>na</strong> programe, ako túto správu obslúži. Dos však bolo teórie, poïmesi to aj prakticky vy<strong>sk</strong>úša . Pozrite sa teraz <strong>na</strong> výpis príkladu First, <strong>na</strong>jprv <strong>na</strong> výpis súboru first.h.Nájdite si deklaráciu chránených (protected) funkcií v triede CFirstApp. Nájdete tam deklaráciujednej funkcie OnPaint. Z<strong>na</strong>ky afx_msg oz<strong>na</strong>èujú, že táto funkcia slúži <strong>na</strong> spracovanie správsystému Windows funkciami knižnice MFC (v <strong>sk</strong>utoènosti je afx_msg len oz<strong>na</strong>èenie pre nás, žedaná funkcia je èlenom mapy správ, prekladaè toto oz<strong>na</strong>èenie ignoruje). Meno tejto funkcie sinemôžeme voli , ako sa nám zachce. Pre každú správu, ktorú vie knižnica MFC obslúži , má užMFC vyhradené nejaké meno. Takže ak my chceme obslúži stlaèenie ¾avého tlaèidla myši,musíme použi èlen<strong>sk</strong>ú funkciu knižnice MFC OnLButtonDown a nijakú inú. Opis správ a priradenýchfunkcií nájdete v tabu¾ke 2. Pod deklaráciou tejto funkcie sa <strong>na</strong>chádza makroDECLARE_MESSAGE_MAP, ktoré je vždy deklarované v definícii tej triedy, ktorá má <strong>na</strong> starostispracovanie konkrétnej správy. Takto sa deklaruje mapa správ. Implementáciu mapy správ sipozrite v zdrojovom súbore príkladu First.cpp. Zaèí<strong>na</strong> sa makrom BEGIN_MESSAGE_MAP akonèí makrom END_MESSAGE_MAP. V makre BIGIN_MESSAGE_MAP môžete nájs názovtriedy, pre ktorú je urèená táto mapa správ (CMyFrame), ako aj meno triedy, od ktorej je tátotrieda odvodená (CFrameWnd). Medzi týmito dvoma makrami sa <strong>na</strong>chádza zoz<strong>na</strong>m správ,ktoré sú obsluhované funkciami MFC. V <strong>na</strong>šom prípade je to správa ON_WM_PAINT, ktorá jeobsluhovaná funkciou OnPaint. Ak teda aplikácia vyšle správu WM_PAINT, aplikaèný systém juzachytí a zavolá príslušnú funkciu, aby správu obslúžila. Pri vývoji aplikácie sa obyèajnenemusíte stara o písanie správ a písanie príslušných deklarácií ich obslužných funkcií. Tútoprácu za nás robí Class Wizard. Jeho použitie <strong>na</strong> konkrétnom príklade si ukážeme <strong>na</strong>budúce.Aby ste však aspoò trochu pochopili, ako daný systém pracuje, mierne si zdoko<strong>na</strong>líme príkladFirst. Chceme, aby sa po stlaèení ¾avého tlaèidla myši vypísal text „Tu som“ presne <strong>na</strong> tommieste, kde sme klikli myšou do ok<strong>na</strong> aplikácie. Ako to urobi ? V prvom rade musíme pridafunkciu, ktorá by obsluhovala správu stlaèenia ¾avého tlaèidla myši. Nebudeme ešte <strong>na</strong> topoužíva Class Wizard, urobíme to klasicky ruène. Ako vidíte v tabu¾ke 2, správa <strong>na</strong> stlaèenie¾avého tlaèidla myši sa volá WM_LBUTTONDOWN a jej obslužná funkcia OnLButtonDown.Preto dopíšte deklaráciu obslužnej funkcie OnLButtonDown do súboru First.h pod funkciuOnPaint, takže chránená èas triedy CFirstApp bude vyzera takto:protected:// afx_msg oz<strong>na</strong>èuje ,že funkcia OnPaint je súèas ouspracúvania správ MFC122 PC REVUE 12/2000

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!