⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gtk_tut_it-2.html

📁 gtk是linux一款强大的夸平台的图形化开发工具
💻 HTML
📖 第 1 页 / 共 2 页
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"><HTML><HEAD> <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9"> <TITLE>GTK Tutorial: Iniziamo</TITLE> <LINK HREF="gtk_tut_it-3.html" REL=next> <LINK HREF="gtk_tut_it-1.html" REL=previous> <LINK HREF="gtk_tut_it.html#toc2" REL=contents></HEAD><BODY BGCOLOR="#FFFFFF"><A HREF="gtk_tut_it-3.html">Avanti</A><A HREF="gtk_tut_it-1.html">Indietro</A><A HREF="gtk_tut_it.html#toc2">Indice</A><HR NOSHADE><H2><A NAME="s2">2. Iniziamo</A></H2><P>La prima cosa da fare &egrave; certamente quella di scaricare il GTK e installarlo.Potete prendere l'ultima versione dal sito ftp.gtk.org in /pub/gtk. Un'altrapossibile sorgente di informazioni &egrave; il sito<A HREF="http://www.gtk.org/">http://www.gtk.org/</A>. <P>GTK usa il comando GNU autoconf per autoconfigurarsi. Una volta estratti i file dall'archivio tar, eseguite configure --help pervedere una lista delle opzioni del comando configure.<P><P>Per iniziare la nostra introduzione a GTK, cominceremo con il pi&ugrave; sempliceprogramma possibile. Questo programma crea una finestra con dimensioni (in pixel)di 200x200 e l'unica possibilit&agrave; di uscita &egrave; di ucciderlo usando lashell o il Window Manager.<P><BLOCKQUOTE><CODE><PRE>#include &lt;gtk/gtk.h>int main (int argc, char *argv[]){    GtkWidget *window;        gtk_init (&amp;argc, &amp;argv);        window = gtk_window_new (GTK_WINDOW_TOPLEVEL);    gtk_widget_show (window);        gtk_main ();        return 0;}</PRE></CODE></BLOCKQUOTE><P>Tutti i programmi GTK includeranno sicuramente &lt;gtk/gtk.h&gt; in cui vengonodichiarate le variabili, le funzioni, le strutture, etc. che saranno usate nellatua applicazione GTK.<P><P>La linea seguente: <P><BLOCKQUOTE><CODE><PRE>gtk_init (&amp;argc, &amp;argv);</PRE></CODE></BLOCKQUOTE><P>invoca la funzione gtk_init(gint *argc, gchar ***argv) che sar&agrave; usata intutte le applicazioni GTK. Questa funzione sistema alcune cose al posto nostro,come la visuale predefinita e la mappa dei colori, e  procede poi chiamandogdk_init(gint *argc, gchar ***argv).Questa funzione inizializza la libreria per l'uso, setta il gestore predefinitodei segnali e guarda negli argomenti, passati via linea di comando alla vostraapplicazione, alla ricerca di uno di questi argomenti:<UL><LI> <CODE>--display</CODE></LI><LI> <CODE>--debug-level</CODE></LI><LI> <CODE>--no-xshm</CODE></LI><LI> <CODE>--sync</CODE></LI><LI> <CODE>--show-events</CODE></LI><LI> <CODE>--no-show-events</CODE></LI></UL><P>Rimuove poi questi argomenti dalla lista degli argomenti passati, lasciandoquelli non riconosciuti a disposizione della vostra applicazione che potr&agrave;tenerne conto o ignorarli.In questo modo si crea un set di argomenti standard accettato da tutte leapplicazioni GTK.<P><P>Le seguenti 2 linee di codice creano e mostrano la finestra.<P><BLOCKQUOTE><CODE><PRE>  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);  gtk_widget_show (window);</PRE></CODE></BLOCKQUOTE><P>L'argomento GTK_WINDOW_TOPLEVEL specifica che noi vogliamo che la nostra finestrasi sottometta alle decorazioni del windows manager e alla posizione che quest'ultimoindicher&agrave;. Invece di creare una finestra avente dimensioni 0x0, la dimensionedi una finestra senza figli (altri widget, come i bottoni, etc) &egrave; predefinitaa 200x200 cos&igrave; che si possa manipolarla.La funzione gtk_widget_show()  fa s&igrave; che GTK sappia che abbiamo finito disettare gli attributi di questo widget e che quindi quest'ultimo pu&ograve; esserevisualizzato.<P><P>L'ultima linea ci fa entrare nel ciclo principale del GTK.<P><BLOCKQUOTE><CODE><PRE>gtk_main ();</PRE></CODE></BLOCKQUOTE><P>gtk_main() &egrave; un'altra chiamata che vedrete in tutte le applicazioni GTK.Quando il controllo raggiunge questo punto, l'applicazione si metter&agrave; adormire aspettando che si verifichino eventi di X (come la pressione di un bottoneo di un tasto), timeout o notifiche di Input/Output dai fileNel nostro esempio, comunque, tutti gli eventi vengono ignorati.<P><H2><A NAME="ss2.1">2.1 Hello World in GTK</A></H2><P>Ok, ora un programma con un widget (un bottone). E' il classico ``Hello World''alla GTK. <P><BLOCKQUOTE><CODE><PRE>/* helloworld.c */#include &lt;gtk/gtk.h>/* E' una funzione di ritorno (callback). Gli argomenti passati sono ignorati in questo * esempio.* Piu' informazioni sulle callback in seguito. */void hello (GtkWidget *widget, gpointer data){    g_print ("Hello World\n");}gint delete_event(GtkWidget *widget, gpointer data)  {      g_print ("delete event occured\n");      /* Se si d&agrave; FALSE al gestore del segnale ``delete_event'', GTK emettera' il segnale       * ``destroy''. Fornire TRUE significa non volere che la finestra sia distrutta.       * Questo e' utile per far uscire delle finestre di dialogo del tipo:      * 'sei sicuro di voler uscire ?'      * Cambia TRUE in FALSE e la finestra principale sara' distrutta con un "delete_event"      */    return (TRUE);}/* Un'altra callback */void destroy (GtkWidget *widget, gpointer data){    gtk_main_quit ();}int main (int argc, char *argv[]){    /* GtkWidget e' il tipo di dato per i Widget */    GtkWidget *window;    GtkWidget *button;        /* Questa e' una chiamata presente in tutte le applicazioni GTK. Gli argomenti della        linea di comando vengono scorsi e restituiti alla applicazione  */    gtk_init (&amp;argc, &amp;argv);        /* Crea una nuova finestra */    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);        /* Quando alla finestra viene passato il segnale ``delete_event'' (questo      * segnale viene passato Windows Manager di solito con l'opzione 'close'      * o con la barra del titolo (title bar)) noi chiediamo che la funzione      * delete_event() (definita sopra) venga invocata.     * Il dato passato come argomento alla funzione di ritorno &eacute; NULL     * ed &eacute; ignorato dalla funzione stessa. */    gtk_signal_connect (GTK_OBJECT (window), "delete_event",                        GTK_SIGNAL_FUNC (delete_event), NULL);        /* Qui connettiamo l'evento ``destroy'' al gestore del segnale.     * Questo evento accade quando noi chiamimo la funzione gtk_widget_destroy()      * sulla finestra o se ritorniamo FALSE dalla callback ``delete_event''. */    gtk_signal_connect (GTK_OBJECT (window), "destroy",                        GTK_SIGNAL_FUNC (destroy), NULL);    /* Setta il bordo interno della finestra */    gtk_container_border_width (GTK_CONTAINER (window), 10);        /* Crea un nuovo bottone avente etichetta (label)  uguale a ``Hello World'' */    button = gtk_button_new_with_label ("Hello World");        /* Quando il bottone riceve il segnale ``clicked'', invochera' la funzione      * hello() passando NULL come argomento della funzione. La funzione     * hello() &eacute; definita sopra. */    gtk_signal_connect (GTK_OBJECT (button), "clicked",                        GTK_SIGNAL_FUNC (hello), NULL);        /* Questo far&agrave; s&igrave; che la finestra venga distrutta dalla chiamata     * gtk_widget_destroy(window) quando il bottone verr&agrave; premuto. Ancora,     * questo segnale (``destroy'') puo' arrivare da qui o dal windows      * manager */    gtk_signal_connect_object (GTK_OBJECT (button), "clicked",                               GTK_SIGNAL_FUNC (gtk_widget_destroy),                               GTK_OBJECT (window));        /* Questo inserisce il bottone nella finestra      * (un contenitore GTK) */    gtk_container_add (GTK_CONTAINER (window), button);        /* Il passo finale &eacute; il mostrare questo nuovo widget appena creato */    gtk_widget_show (button);        /* e la finestra */    gtk_widget_show (window);        /* Tutte le applicazioni GTK devono avere la funzione gtk_main().      * Il controllo finisce qui e attende un evento (come la pressione     * di un tasto o l'evento di un mouse). */    gtk_main ();        return 0;}</PRE></CODE></BLOCKQUOTE><P><H2><A NAME="ss2.2">2.2 Compilare hello World</A></H2><P>Per compilare si utilizza :<P><BLOCKQUOTE><CODE><PRE>gcc -Wall -g helloworld.c -o hello_world `gtk-config --cflags` \    `gtk-config --libs`</PRE></CODE></BLOCKQUOTE>(N.d.T.: se lanciato da linea di comando, il precedente comando dicompilazione va messo su di una unica linea eliminando il backslash) <P>In questo modo, si usa il progamma <CODE>gtk-config</CODE>, che vienedistribuito con gtk. Questo programma 'sa' che opzioni di compilatoresono necessarie per compilare i programmi che usano gtk.<CODE>gtk-config --cflags</CODE> d&agrave; come risultato una lista di directoryin cui i file di include devono essere cercati, e <CODE>gtk-config --libs</CODE>fornisce invece la lista delle librerie che devono essere linkate con ledirectory in cui devono essere cercate.<P><P>Le librerie che normalmente vengono linkate sono:<UL><LI> la libreria glib (-lglib), contiene varie funzioni, ma solo g_print() &eacute; usato in questo esempio. GTK si appoggia a questalibreria, quindi essa viene sempre, comunque, linkata. Vedi comunquela  sezione sulla <A HREF="gtk_tut_it-17.html#sec_glib">glib</A> per altri dettagli.</LI><LI>La libreria GDK (-lgdk), la copertura della X11.</LI><LI>La libreria GTK (-lgtk), la libreria dei widget, basata sulla GDK.</LI><LI>La libreria Xlib(-lX11) la quale &egrave; usata dalla GDK.</LI><LI>La libreria Xext(-lXext). Questa contiene il codice per le pixmap amemoria condivisa e altre estensioni di X.</LI><LI>La libreria matematica (-lm). Questa &eacute; usata dalla GTK pervari scopi.</LI></UL><P><H2><A NAME="ss2.3">2.3 Teoria dei segnali e delle funzioni di ritorno (callback)</A></H2><P>Prima di guardare in dettaglio ``Hello World'', parleremo un po' degli eventie delle funzioni di ritorno. GTK  &egrave; un toolkit guidato dagli eventi,il che significa che se ne star&agrave; a dorimire in gtk_main finch&eacute;non succede un evento ed il controllo viene passato alla funzione appropriata.<P><P>Questo passaggio di controllo &egrave; basato sull'idea dei segnali.Quando si ha un evento, come la pressione di un bottone del mouse, verr&agrave;emesso il segnale appropriato, per esempio dal widget che &eacute; stato premuto.Questo &egrave; il modo in cui GTK fa molto del suo utile lavoro. Per fars&igrave; che un bottone esegua una azione, prepareremo un gestore del segnaleche catturi questi segnali e chiami la funzione corretta. Questo viene fattousando una funzione del tipo:<P><BLOCKQUOTE><CODE><PRE>gint gtk_signal_connect (GtkObject *object,                         gchar *name,                         GtkSignalFunc func,

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -