====== Caricare una gui wxwidgets da un file xml ====== Autore: **//Fabio Di Matteo//** \\ Ultima revisione: **// 04/01/2019 - 19:20 //** // // Richiede **WxWidgets >4**\\ \\ Nell'articolo [[programmazione:wxwidgets:introduzione_a_wxwidgets]] abbiamo imparato a scrivere il codice base per un semplice progetto wxwidgets. Abbiamo costruito la nostra interfaccia grafica a forza di linee di codice c++. Adesso vedremo come realizzare un file xml contenente la nostra gui e caricarlo nel nostro progetto.\\ \\ Realizzeremo il nostro file xml o per meglio dire il nostro file **XRC** con [[http://wxformbuilder.org/| Wxformbuilder]] . ===== Il nostro file xrc ===== {{programmazione:wxwidgets:xrc-wxwidgets.png|}} **gui.xrc** 1 wxVERTICAL wxALL 5 wxALL 5 0 0 ===== Il codice ===== Tramite il codice sottostante caricheremo e visualizzeremo il nostro file xrc: main.cc #include "wx/wx.h" #include "wx/xrc/xmlres.h" class MyApp: public wxApp { //questo metodo รจ presente in ogni oggetto wxApp // serve a lanciare la prima finestra e ad altre inizializzazioni. virtual bool OnInit(); }; class MyClass{ public: wxDialog dialog0; wxTextCtrl *text0; wxButton *button0; void ShowDialog(); void OnClickme(wxCommandEvent& event); } ; bool MyApp::OnInit() { wxXmlResource::Get()->InitAllHandlers(); //inizializziamo wxXmlResource::Get()->Load(wxT("gui.xrc")); //carichiamo il file xrc MyClass *MainWin = new MyClass(); //instanziamo la nostra classe responsabile MainWin->ShowDialog(); //del caricamento della nostra gui return true; } //Macro che implementa la main() principale IMPLEMENT_APP(MyApp) //L'implementazione della nostra classe responsabile del caricamento della nostra gui void MyClass::ShowDialog() { //Ricavo il riferimento alla mia finestra principale wxXmlResource::Get()->LoadDialog(&dialog0, NULL, wxT("dialog0")); //Riferimento alla mia casella di testo text0 = XRCCTRL(dialog0, "text0", wxTextCtrl); //Riferimento al mio button button0 = XRCCTRL(dialog0, "button0", wxButton); //Associo l'evento click di button0 il metodo MyClass::OnClickme button0->Bind(wxEVT_BUTTON, &MyClass::OnClickme, this); dialog0.ShowModal(); } void MyClass::OnClickme(wxCommandEvent& event) { text0->ChangeValue("Hai cliccato"); printf("Cliccato!\n"); } **makefile** #Linux CPP = g++ OPTS = `wx-config --cxxflags --libs` #Windows con mxe CPP_WIN32 = i686-w64-mingw32.static-g++ OPTS_WIN32 = `i686-w64-mingw32.static-wx-config --cxxflags --libs` all: make linux #make windows #non funziona richiede wxWidgets 4 e non sono disponibili ancora linux: $(CPP) main.cc -o wxtest $(OPTS) windows: $(CPP_WIN32) main.cc -o wxtest.exe $(OPTS_WIN32) strip wxtest.exe clean: rm wxtest.exe wxtest