Treść książki

Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
3.1.ogólnaStrukturaaplikacji
65
klasadziedziczyodklasywxApp,którejobiektstanowiinstancjęaplikacji.PonadtoklasawxApp
zawierawieleprzydatnychmetod,którepozwalająnazarządzanieprogramemorazprocesem,wktó-
rymzostałuruchomiony3.DeklaracjanaszejklasyMyAppjestidealnymmiejscemdozadeklarowania
metod,jakiepowinnytowarzyszyćnaszemuprogramowiopróczobsługigłównegooknaprogramu.
Jazwykledoobiektuaplikacjiprzypisujęjeszczemechanizmyzwiązanezwyświetleniemekranu
powitalnegolubmechanizmysprawdzające,czywsystemieistniejejużuruchomionakopiaprogramu.
WtejchwiliklasanaszegoprogramuzawierajedyniepublicznąwirtualnąmetodęboolOnInit().Jest
onaautomatycznieuruchamianajakopierwszapostarcieprogramuiutworzeniuobiektuaplikacji.Jej
bliźniacząsiostrąjestmetodaintOnExit(),którajestautomatycznieuruchamianaprzyzamknięciu
programu-będziemystosowaćpóźniej.
Wliniachod14.do18.znajdujesiędeklaracjaklasy,którejobiektbędziereprezentowałgłówne
oknoprogramu.KlasaMyFramedziedziczypublicznieodklasywxFrame,którajestwyposażona
wwielemetodizmiennych,dziękiktórymbędzieszmógłwpełnipanowaćnadzachowaniem,wyglą-
demicechamigłównegooknaprogramu.WnaszymprzykładzieklasaMyFramezawierajedynie
prostykonstruktor,któryjakoargumentprzyjmujeciągznakówbędącynazwąprogramuwyświetlaną
wpaskutytułu.
Teraznadajemynaszemuprogramowitrochężyciaiskupiamysięnalinii20.,gdziejestumiesz-
czonemakroIMPLEMENT_APP()przyjmującejakoargumentnazwęklasyaplikacji,czyliwnaszym
przypadkuMyApp.Makrotojestodpowiedzialnezazainicjowaniewewnętrznego,skomplikowanego
procesuwxWidgets,któregocelemjeststworzenieinstancjinaszegoprogramuorazsprawdzenie,
czynaszprogramzostałskompilowanyprzyużyciutejsamejkonfiguracjikompilacjicobiblioteka.
Wbrewtemu,copisząinniautorzy4,definicjamakraniezawierawsobiefunkcjimain(),aleodnosi
siędomechanizmów,któretworząirejestrująwsystemieobiektnaszegoprogramu5.Oczywiście
samafunkcjamain()jestwywoływanawobrębietychmechanizmów,jednakprogramistaniemado
niejdostępuzpoziomumakraIMPLEMENT–APP.BibliotekawxWidgetsudostępniazaawansowane
mechanizmyumożliwiającezastosowaniewłasnejfunkcjimain(),którejednaknieprzedmiotem
rozważańwtejksiążce.Wystarczyzapamiętać,żemakroIMPLEMENT–APPjesttylkojednązmożli-
wościzainicjowaniaprogramunapisanegozwxWidgets.Gdymakro,akonkretnieprocesy,któredo
niegoprzypisane,zakończądziałanie,wynikwpostaciwskaźnikadoobiektunaszegoprogramuzostaje
wpisanydoglobalnejzmiennejwxTheApp,zktórejmożnakorzystaćprzezcałyczaspracyprogramu.
Skoronaszprogramzostałzainicjowanyijegoobiekt(tzn.obiektklasyMyApp)poprawnieutwo-
rzony,pozostajejedynieautomatyczneuruchomienieznajdującejsięwnimfunkcjiOnInit(),której
definicjaznajdujesięwliniachod22.do28.Wlinii24.zostajeutworzonyobiektklasyMyFrame,
czyliobiektgłównegooknanaszegoprogramu.Samoutworzenieobiektuoknaniewystarczy-trzeba
jejeszczewyświetlićnaekraniemonitora,corealizujemymetodąwirtualnąboolShow(boolshow=
true).ArgumentfunkcjiShow(),któryjestwartościąlogicznąbool,określa,czyoknomabyćwyświe-
tlone(true),czyteżmapozostaćukryte(false).
Otym,jakbędziewyglądaćgłówneoknoprogramudecydujemy,definiującdomyślnykonstruk-
torklasyMyFrame.Wnaszymprzykładzieniemodyfikujemyżadnychwartościoprócztytułuokna,
któryprzekazujemyjakojedynyargumentkonstruktora(linia30.).Wlinii31.określamyinstrukcje
domyślnieinicjującepozostałeargumentykonstruktora,dziedziczonezklasywxFrame.Szczegóło-
wemuomówieniuargumentówkonstruktorapoświęcętrochęuwagiwdalszejczęściksiążki,tutaj
wspomnęjedynie,żeposzczególneargumentyokreślająkolejno:NULLnaszeoknoniemaokna
rodzica,wxID–ANY-naszeoknoniemaidentyfikatora(araczejmadomyślnyidentyfikatorrówny
-1),title-oknomatytułokreślonyprzezargumenttitlekonstruktorazlinii30.,wxDefaultPosition
3
WwieluprzypadkachklasawxAppdziedziczyodklasywxAppConsoleabypoznaćwięcejszczegółów,sprawdź
jejdokumentację.
4
JanuszGanczarski,TomaszOwczarek,C++.Wykorzystajpotęgęaplikacjigraficznych,Helion,Gliwice2008,
str.19.
5
DefinicjęmakraIMPLEMENT–APP,atakżeinnychsłużącychdoinicjowaniaobiektuprogramumożeszznaleźć
iprzeanalizowaćwplikachinit.horazapp.hznajdującychsięwfolderzeincludebibliotekiwxWidgets.