Autore: Fabio Di Matteo
Ultima revisione: 03/04/2010
Ecco quello che serve a noi:
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
Creiamo il file C:\gtk2\etc\gtk-2.0\gtkrc contenente la seguente riga:
gtk-theme-name = "MS-Windows"
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 Glade 3 il disegnatore visuale di interfacce.
Ecco il nostro codice:
#include <gtk/gtk.h> //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.
<?xml version="1.0"?> <interface> <requires lib="gtk+" version="2.16"/> <!-- interface-naming-policy project-wide --> <object class="GtkWindow" id="MainWindow"> <property name="visible">True</property> <signal name="delete_event" handler="on_MainWindow_delete_event"/> <child> <placeholder/> </child> </object> </interface>
Il nostro wiki installa solamente cookie tecnici necessari al funzionamento della piattaforma "Dokuwiki". Niente analitics, statistiche, tracciamenti o altro.