====== Sviluppare con le librerie Gtk+2 su Windows =====
Autore: **//Fabio Di Matteo//** \\ Ultima revisione: **//03/04/2010//** \\ \\
Ecco quello che serve a noi:
- Il pacchetto contenente l'[[http://www.gtk.org/download-windows.html|sdk gelle gtk+2]] comprensivo di tutto, dipendenze comprese per windows ;
- L'IDE per C/C++ [[http://www.codeblocks.org/home|Code::Blocks]] ;
===== Installazione dell'SDK GTK+2 =====
Scarichiamo il pacchetto .zip gtk2 bundle e scompattiamolo in ''C:'' in modo da ritrovarci la directory ''C:\gtk2'' . Inoltre è necessario aggiungere alla variabile di sistema PATH il percorso della sottodirectory ''bin'' delle nostre gtk+2 . Per far questo andiamo nel **pannello di controllo -> sistema -> tab avanzate->variabili d'ambiente->modifica variabile PATH ** aggiungendo la stringa ''C:\gtk2\bin'' . Questo permettera a codeblocks di trovare il tool **pkg-config** necessario per trovare dinamicamente i percorsi dei file necessari alla compilazione. \\
Verifichiamo se la nostra installazione è andata a buon fine aprendo il terminale di widows (cmd) e digitiamo il seguente comando:
pkg-config --cflags gtk+-2.0
se vengono restituiti i percorsi alle varie directory dove si trovano i file necessari per la compilazione (headers e percorsi alle librerie dinamiche) l'installazione manuale è andata a buon fine.
**N.B. chi dovra' solo eseguire i vostri programmi non dovra' installare le gtk per lo sviluppo, gli bastera' soltanto installare il classico pacchetto con le gtk runtime autoinstallante**
==== Settiamo il tema grafico stile windows per gtk+2 ====
Creiamo il file **C:\gtk2\etc\gtk-2.0\gtkrc** contenente la seguente riga:
gtk-theme-name = "MS-Windows"
===== Lavoriamo con Codeblocks =====
Installiamo l'IDE, dopo di che creiamo un progetto gtk+2 da **File->New->Project->Gtk+ project** . Code::blocks creera un progetto con del codice d'esempio in un singolo di nome ''main.c'' . Nel nostro esempio sostituiamo il codice d'esempio con il nostro. Nel nostro esempio utilizzeremo la un file xml separato per la definizione dei widget creato con [[http://glade.gnome.org/|Glade 3]] il disegnatore visuale di interfacce. \\
Ecco il nostro codice:
#include //includo le librerie gtk e glade.
GtkBuilder *xml; //questo è il puntatore al file xml che contiene l'interfaccia
GtkWidget *widget; //questa variabile serve per recuperare di volta in volta il
// widget (ovvero l'oggetto ) che vogliamo usare
G_MODULE_EXPORT void on_MainWindow_delete_event(GtkWidget *widget, gpointer user_data) //altra callback associata alla chiusura della
{ // finestra
gtk_main_quit();
}
int
main (int argc, char *argv[])
{
gtk_init (&argc, &argv);
gchar* base;
gchar* glade_file;
if (g_find_program_in_path ("nomeeseguibile")==NULL){
/*Ricava il percorso dell'eseguibile, senza il nome del file*/
base = g_path_get_dirname(argv[0]);
/*Concatena il percorso base al nome file gui.glade */
glade_file = g_build_filename (base, "gui.glade", NULL);
}else{
base = g_path_get_dirname(g_find_program_in_path ("nomeeseguibile"));
glade_file = g_build_filename (base, "gui.glade", NULL);
}
/*Infine carica come disolito il file dell'interfaccia */
GError* error = NULL;
xml = gtk_builder_new ();
if (!gtk_builder_add_from_file (xml, glade_file, &error))
{
g_warning ("Couldn't load builder file: %s", error->message);
g_error_free (error);
}
/* connette tutti gli eventi dei widget alle rispettive funzioni */
gtk_builder_connect_signals (xml, NULL);
/* Avvia il ciclo principale delle gtAvvia il ciclo principale delle gtk*/
gtk_main ();
return 0;
}
Da notare il fatto che su windows sembra essere necessario aggiungere ''G_MODULE_EXPORT'' alla definizione delle callbacks per far funzionare l'autoconnessione ai segnali emessi dai widgets con lo stesso nome.
G_MODULE_EXPORT void on_MainWindow_delete_event(GtkWidget *widget, gpointer user_data)
Di seguito il file della nostra interfaccia utente **gui.glade** realizzato con Glade 3.