Treść książki

Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
68
3.pierwSzeokno
wxWindow,odktórejdziedziczywxFrame.Wpołączeniutedwazestawydostępnychopcjitworzą
naprawdęwielkizasóbmożliwości.
OstatniargumentkonstruktorawxFrame,czyliconstwxString&name=wxFrameNameStr,to
nazwaokna(zasobu)używanawprogramowaniudlaśrodowiskaXWindowSystemzkomponentem
Motif.Wzwiązkuztym,żeksiążkanieobejmujeprogramowaniadlaśrodowiskaXWindowSystem,
wtokunaszychwspólnychrozważańnadwxWidgetsniebędziemystosowaćtegoargumentuwogóle7.
3.2.1.
Modyfkowaniekonstruktora
Teraz,gdypoznaliśmyjużtrochęskładniękonstruktora,spróbujemywpłynąćnawyglądokna
wnaszymprzykładowymprojekcie.OtwórzprojektwxWidgets,jakiutworzyłeśpodczaslektury
poprzedniegopodrozdziału,iwprowadźzmianydodeklaracjiklasyMyFrameorazdodefinicjijej
konstruktorawtakisposób,abymiećwpływnawartośćwszystkichargumentówprzekazywanychdo
obiektuklasyMyFrame.Wliniachod14.do18.powinieneśotrzymaćcośtakiego:
14classMyFrame:publicwxFrame
15{
16
public:
17
MyFrame(wxWindow*parent,wxWindowIDid,constwxString&title,
constwxPoint&pos,constwxSize&size,longstyle);
18};
natomiastkonstruktorMyFrame,znajdującysięwliniachod30.do34.,powinienprzyjąćformę:
30MyFrame::MyFrame(wxWindow*parent,wxWindowIDid,constwxString&title,
constwxPoint&pos,constwxSize&size,longstyle)
31:wxFrame(parent,id,title,pos,size,style)//ListainicjalizacyjnawxFrame
32{
33
//CenterOnScreen();
34}
Zwróćuwagę,żewszystkiezabiegi,jakichdokonaliśmy,polegałyjedynienaprzeniesieniulisty
argumentówzkonstruktoraklasywxFramedolistyinicjalizacyjnejkonstruktoraklasyMyFrame.
WartościparametrówkonstruktoraMyFramezostanąprzeniesionedoodpowiadającychimparame-
trówlistyzlinii31.Zpewnościązauważyłeśrównież,żenowaformadefinicjikonstruktorazawiera
-opatrzonynaraziekomentarzem-wiersz,wktórymznajdujesięwywołaniefunkcjiwyśrodkowują-
cejoknoprogramunaekraniemonitora.Gdybyśmyusunęliznakikomentarzaiprzywrócilidziałanie
funkcjiCenterOnScreen(),zyskałabyonapierwszeństwoprzeddefinicjąpołożeniaoknaprzekazaną
argumentemkonstruktorainiezależnieodtego,jakąwartośćprzyjąłbyargumentpos,oknozawsze
wyświetlałobysięnaśrodkuekranu.FunkcjąobardzopodobnymdziałaniudoCenterOnScreen()jest
funkcjavoidCenterOnParent(intdir=wxBOTH),którawyśrodkowujeoknowstosunkudorodzica.
Spróbujsięterazzastanowić,jakpowinnowyglądaćwywołaniekonstruktoranaszegookna
wobrębiefunkcjiOnInit(),znajdującesięwlinii24.Załóżmy,żechcemy,abynaszeoknomiało
ramkęostałymrozmiarze800pikseliszerokościna600pikseliwysokości,pouruchomieniupro-
gramuwyświetlałosięwpunkciepoczątkowymowspółrzędnychx=100iy=100,miałoprzycisk
zamknięciaprogramu,atakżedałosięminimalizować.Jeślimożeszpochwalićsięwynikiemtakim
jakponiżej,gratuluję.
24MyFrame*frame=newMyFrame(NULL,wxID_ANY,appName,wxPoint(100,100),
wxSize(800,600),wxCAPTION|wxMINIMIZE_BOX|wxCLOSE_BOX);
7
OstatniargumentkonstruktoraklasywxFramedomyślniejestzainicjowanywartościąwxFrameNameStr,która
zostałazadeklarowanawplikutoplevel.h.WrzeczywistościjesttostałatablicaznakówwstyluC,ajejdefinicja
(WXDLLIMPEXP–DATA–CORE(constchar)wxFrameNameStr[])jestopartanaciekawychwewnętrznychmechani-
zmachwxWidgets.Głodnychwiedzyodsyłamdoanalizykodubiblioteki,gdyżniestetydokumentacjawxWidgetsnie
zawieraanisłowanatentemat.