Treść książki

Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
3.4.paSekmenu
77
bezpośredniowodpowiednichwywołaniachfunkcjiAppend().Wśródjejodmianznajdujesięm.in.też
taka,któraumożliwiazastosowaniedokładnietakiegorozwiązania.Przyjmujeonaniemalidentyczne
argumenty,jakieznaszjużzkonstruktoraklasywxMenuItemzróżnicą,żefunkcjaniewymaga
wskazaniarodzicapozycjimenu.Możemyteżpominąćniektóreargumentydomyślne.Wypróbujmy
towpraktyce.
ZdeklaracjiMyFrameusuńwszystkiedeklaracjepozycjiwxMenuItem,azkoduusuńwszyst-
kieichdefinicje,czylikonstruktoryposzczególnychpozycjimShowDateTime,mShowSystemVersion,
mCloseorazmAboutProgram.WmiejscekolejnychwywołańfunkcjiAppend(),dodającychpozycje
doposzczególnychmenu,wpisz:
mFile->Append(wxID_ANY,wxT("Pokażdatę"),wxT("Pokazujedatę"),wxITEM_CHECK);
mFile->Append(wxID_ANY,wxT("Pokażwersjęsystemu"),wxT("Pokazujewersjęsystemu"));
mFile->AppendSeparator();
mFile->Append(wxID_ANY,wxT("Zamknijprogram"),wxT("Zamykaprogram"));
mHelp->Append(wxID_ANY,wxT("Oprogramie"),wxT("Oprogramie"));
Zestrukturykonstruktorówpozostałyjedynieidentyfikatoryorazniezbędnetekstygwarantujące
poprawnewyświetleniemenu.PonadtopierwszapozycjawmiejscedomyślnegostyluwxITEM–
NORMALotrzymałastylwxITEM–CHECK.
Skompilujterazprogramisprawdź,jakwyglądapasekmenu.Zapewneniedostrzegłeśżadnych
zmian,procestworzeniamenuzostałznacznieprzyspieszony,akodprogramuskróconyistałsię
bardziejczytelny.Tojednakjeszczeniekoniecmożliwościodchudzaniakodu.
MożeszzastosowaćjednązodmianfunkcjiAppned(),któretworząpozycjemenuwrazzgóry
ustalonymstylemlubzadanąfunkcjonalnością.Otolistatychfunkcji:
wxMenuItem*AppnedSeparator()-funkcjęjużznasz,dodajeonadomenupoziomysepa-
rator;
wxMenuItem*AppendCheckItem(intid,constwxString&item,constwxString&help=
wxEmptyString)dodajedomenupozycjęzestylemwxITEM–CHECK;
wxMenuItem*AppendRadioItem(intid,constwxString&item,constwxString&help=
wxEmptyString)dodajedomenupozycjęzestylemwxITEM–RADIO;
wxMenuItem*AppendSubMenu(wxMenu*sb,constwxString&text,constwxString&help
=wxEmptyString)-dodajemenupodrzędne.
PowykorzystaniusprytnychodmianfunkcjiAppend(),jakiezawieraklasawxMenu,całemenu
możezostaćopisanetak:
mFile->AppendCheckItem(wxID_ANY,wxT("Pokażdatę"),wxT("Pokazujedatę"));
mFile->Append(wxID_ANY,wxT("Pokażwersjęsystemu"),wxT("Pokazujewersjęsystemu"));
mFile->AppendSeparator();
mFile->Append(wxID_ANY,wxT("Zamknijprogram"),wxT("Zamykaprogram"));
mHelp->Append(wxID_ANY,wxT("Oprogramie"),wxT("Oprogramie"));
mb->Append(mFile,wxT("Plik"));
mb->Append(mHelp,wxT("Pomoc"));
this->SetMenuBar(mb);
Towszystko.TrzydeklaracjewdefinicjiklasyMyFrameikilkapowyższychlinijekkoduwystar-
czyłodostworzenianaszegoprzykładowegomenu,beznajmniejszejutratyjegofunkcjonalności.
PodstawoweelementyinterfejsudoskonaleoddająnaturęwxWidgets.Zdająsięprzeczyćzasadzie
mówiącej,żeimdalejwlas,tymwięcejdrzew.JeżeliprogramowałeśjużzinnymibibliotekamiGUI,
zpewnościąwiesz,comamnamyśli.Jestempewien,żeoniezwykłejprostocieiprzyjaznymusposo-
bieniuwxWidgetsprzekonaszsięjeszczewielokrotnie.
Zanimsprawimy,żenaszemenubędzienpowodować”wykonywanieróżnychczynnościwpro-
gramie,powiemCijeszczekrótkooskrótachklawiaturowychmenu.