Questo post è dedicato a tutti coloro che, come me, si sono trovati all'improvviso a dover sviluppare utilizzando le
wxWidgets (un framework grafico
multipiattaforma e
open source, cioè una libreria di componenti elementari per costuire una
GUI)[Leggi su
wikipedia] .
Vediamo come sfruttare VS2005 con le wxWidgets (ver.2.8.4).
Dopo aver scaricato l'
installer ( wxMSW), avviatelo e stabilite la cartella di destinazione. Ad esempio, C:\wxWidgets-2.8.4.
1. Aprite la cartella, andate in build\msw ed avviate wx.dsw. Quando richiesto, convertire tutti i progetti.
2. Quando VS2005 avrà convertito tutti i progetti e sarà tutto pronto per l'utilizzo, generate l'intera soluzione (in questo caso, in modalità Debug). Successivamente alla generazione, in C:\wxWidgets-2.8.4 sarà disponibile la cartella lib\vc_lib che conterrà tutte le librerie generate in precedenza. Ora siamo pronti per poterle utilizzare, vediamo come!
3. Prima di tutto, aggiungere una variabile di ambiente all'intero sistema. Nome variabile : WXWIN Valore : C:\wxWidgets-2.8.4. Successivamente riavviate il sistema!
4. Dopo il riavvio, avviare VS2005 e create un nuovo progetto in C++ Win32 -> Progetto Win32. In questo caso, il nome sarà HelloTest. Proseguite nel wizard lasciando tutte le impostazioni di default ma nella scheda Impostazioni applocazioni selezionate la voce Progetto vuoto.
5. Aggiungere al progetto un file C++, per adesso sarà vuoto. In questo caso, il nome sarà HelloTest.cpp.
6. Impostare le proprietà del progetto.
a. In C/C++, voce Generale, nelle Directory di inclusione aggiuntive inserire : "$(WXWIN)\include";"$(WXWIN)\contrib\include";"$(WXWIN)\lib\vc_lib\mswd";"$(WXWIN)" . Sempre in Generale, alla voce Rileva errori di portabilità a 64 bit impostare No. Ancora in Generale, per Set di caratteri scegliere Non impostato. Nella scheda Preprocessore, aggiungere come Definizioni preprocessore : WIN32;_DEBUG;_WINDOWS;__WINDOWS__;__WXMSW__;__WXDEBUG__;WXDEBUG=1;NOPCH
b. In Linker, voce Generale, in Directory librerie aggiuntive inserire : "$(WXWIN)\lib";"$(WXWIN)\contrib\lib";"$(WXWIN)\lib\vc_lib" . Nella voce Input, Dipendenze aggiuntive, inserire : wxmsw28d_core.lib wxmsw28d_adv.lib wxbase28d.lib wxtiffd.lib wxjpegd.lib wxpngd.lib wxzlibd.lib wxregexd.lib wxexpatd.lib winmm.lib comctl32.lib rpcrt4.lib wsock32.lib oleacc.lib odbc32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbccp32.lib
7. Copiare il seguente codice all'interno del file cpp aggiunto in precedenza :
#include "wx/wxprec.h"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#ifndef WX_PRECOMP
#include "wx/wx.h"
#endif
class MyApp: public wxApp
{
virtual bool OnInit();
};
class MyFrame: public wxFrame
{
public:
MyFrame(const wxString& title,
const wxPoint& pos, const wxSize& size);
void OnQuit(wxCommandEvent& event);
void OnAbout(wxCommandEvent& event);
DECLARE_EVENT_TABLE()
};
enum
{
ID_Quit = 1,
ID_About = 0,
};
BEGIN_EVENT_TABLE(MyFrame, wxFrame)
EVT_MENU(ID_Quit, MyFrame::OnQuit)
EVT_MENU(ID_About, MyFrame::OnAbout)
END_EVENT_TABLE()
IMPLEMENT_APP(MyApp)
bool MyApp::OnInit()
{
MyFrame *frame = new MyFrame( "Hello World",
wxPoint(50,50), wxSize(450,340) );
frame->Show(TRUE);
SetTopWindow(frame);
return TRUE;
}
MyFrame::MyFrame(const wxString& title,
const wxPoint& pos, const wxSize& size)
: wxFrame((wxFrame *)NULL, -1, title, pos, size)
{
wxMenu *menuFile = new wxMenu;
menuFile->Append( ID_About, "&About..." );
menuFile->AppendSeparator();
menuFile->Append( ID_Quit, "E&xit" );
wxMenuBar *menuBar = new wxMenuBar;
menuBar->Append( menuFile, "&File" );
SetMenuBar( menuBar );
CreateStatusBar();
SetStatusText( "Welcome to wxWindows!" );
}
void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
{
Close(TRUE);
}
void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
{
wxMessageBox("This is a wxWindows Hello world sample",
"About Hello World", wxOK | wxICON_INFORMATION, this);
}
Salvare, compilare ed eseguire. Se tutto andrà bene verrà lanciata l'applicazione di esempio.
Ricordate che questa configurazione è per la versione Debug delle librerie wxWidgets, per la versione Release ci sono altri parametri.
Per adesso è tutto!
Enjoy!