====== 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**
===== 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