====== 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. True