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

📄 gtk_tut_it.sgml

📁 gtk是linux一款强大的夸平台的图形化开发工具
💻 SGML
📖 第 1 页 / 共 5 页
字号:
<tscreen><verb>void gtk_table_set_row_spacings (GtkTable *table,                                 gint      spacing);</verb></tscreen><p>e<tscreen><verb>void gtk_table_set_col_spacings (GtkTable  *table,                                 gint       spacing);</verb></tscreen><p>Notate che con queste chiamate,  all'ultima riga e all'ultima colonnanon viene assegnata alcuna spaziatura.<!-- ----------------------------------------------------------------- --><sect1>Esempio di Impacchettamento con Tabelle <p>In questo esempio creiamo una finestra avente tre bottoni dispostiin una tabella 2x2. I primi due bottoni li mettiamo nella riga superiore.Un terzo bottone, quit, lo mettiamo nella riga inferioe, in modo dacomprendere entrambe le colonne. Ci&ograve; significa che dovremmoavere qualcosa di questo tipo:<p><? <CENTER> ><?<IMG SRC="gtk_tut_table.gif" VSPACE="15" HSPACE="10" ALT="Table Packing Example Image" WIDTH="180" HEIGHT="120">><? </CENTER> >Ecco il codice sorgente: <tscreen><verb>/* table.c */#include <gtk/gtk.h>/* la nostra funzione di ritorno. * i dati passati a questa funzione vengono stampati su stdout */void callback (GtkWidget *widget, gpointer data){    g_print ("Hello again - %s was pressed\n", (char *) data);}/* questa funzione fa uscire dal programma */void delete_event (GtkWidget *widget, gpointer data){    gtk_main_quit ();}int main (int argc, char *argv[]){    GtkWidget *window;    GtkWidget *button;    GtkWidget *table;    gtk_init (&amp;argc, &amp;argv);    /* creiamo una nova finestra */    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);    /* predisponiamo il titolo per la finestra */    gtk_window_set_title (GTK_WINDOW (window), "Table");    /* creiamo un gestore per delete_event che esca immediatamente     * da GTK. */    gtk_signal_connect (GTK_OBJECT (window), "delete_event",                        GTK_SIGNAL_FUNC (delete_event), NULL);    /* regoliamo la larghezza del bordo della finestra. */    gtk_container_border_width (GTK_CONTAINER (window), 20);    /* creiamo una tabella 2x2 */    table = gtk_table_new (2, 2, TRUE);    /* mettiamo la tabella nella finesta principale */    gtk_container_add (GTK_CONTAINER (window), table);    /*creiamo il primo bottone */    button = gtk_button_new_with_label ("button 1");    /* quando viene premuto il bottone, chiamiamo la funzione di ritorno     * con un puntatore a "button 1"come argomento */    gtk_signal_connect (GTK_OBJECT (button), "clicked",              GTK_SIGNAL_FUNC (callback), (gpointer) "button 1");    /* inseriamo il bottone 1 nel quadrante in alto a sinistra della tabella */    gtk_table_attach_defaults (GTK_TABLE(table), button, 0, 1, 0, 1);    gtk_widget_show (button);    /* creiamo il secondo bottone */    button = gtk_button_new_with_label ("button 2");    /* quando si preme il bottone, chiamamo la funzione di ritorno     * con un puntatore a "button 2"come argomento */    gtk_signal_connect (GTK_OBJECT (button), "clicked",              GTK_SIGNAL_FUNC (callback), (gpointer) "button 2");    /* inseriamo il secondo bottone nel quadrate in alto a destra della tbella */    gtk_table_attach_defaults (GTK_TABLE(table), button, 1, 2, 0, 1);    gtk_widget_show (button);    /* creiamo il botone "Quit" */    button = gtk_button_new_with_label ("Quit");    /* quando viene premuto questo bottone, chiamiamo la funzione "delete_event"     * e si esce dal programma */    gtk_signal_connect (GTK_OBJECT (button), "clicked",                        GTK_SIGNAL_FUNC (delete_event), NULL);    /* inseriamo il pulsante quit nelle due casele in basso della tabella */    gtk_table_attach_defaults (GTK_TABLE(table), button, 0, 2, 1, 2);    gtk_widget_show (button);    gtk_widget_show (table);    gtk_widget_show (window);    gtk_main ();    return 0;}</verb></tscreen><!-- ***************************************************************** --><sect>Panoramica sui Widget<!-- ***************************************************************** --><p>La procedura generale di creazione di un widget in GTK prevede i seguenti passi:<enum><item> gtk_*_new - una delle varie funzioni che servono per greare un nuovo widget.In questa sezione le vedremo tutte in dettaglio.<item> Connettere tutti i segnali che si vogliono usare alle funzione gestione appfropriate.<item> Assegnare gli attributi all'oggetto.<item> Impacchettare l'oggetto in un contenitore usando la chiamate appropriata, per esempio gtk_container_add() o gtk_box_pack_start().<item> Mostrare l'oggetto con gtk_widget_show().</enum><p>gtk_widget_show() fa s&igrave; che GTK sappia che abbiamo terminato di assegnare gliattributi dell'oggetto grafico, e che &egrave; pronto per essere visualizzato.Si pu&ograve; anche usare la funzione gtk_widget_hide per farlo sparire di nuovo.L'ordine in cui mostrate gli oggetti grafici non &egrave; importante, ma io suggeriscodi mostrare per ultima la finestra, in modo che questa spunti fuori gi&agrave; completa,invece di vedere i singoli oggetti che arrivano sullo schermo a mano a mano che siformano. I figli di un oggetto grafico (anche una finestra &egrave; un oggetto grafico) nonvengono infatti mostrati finch&eacute; la finestra stessa non viene mostrata usando lafunzione gtk_widget_show().<!-- ----------------------------------------------------------------- --><sect1> Casting<p>Noterete andando avanti che GTK usa un sistema di casting di tipo. Questa operazioneviene sempre effettuata usando delle macro che allo stesso tempo controllano lapossibilit&agrave; di effettuare il cast sull'elemento dato e lo effettuano realmente.Alcune macro che avrete modo di incontrare sono:<itemize><item> GTK_WIDGET(widget)<item> GTK_OBJECT(object)<item> GTK_SIGNAL_FUNC(function)<item> GTK_CONTAINER(container)<item> GTK_WINDOW(window)<item> GTK_BOX(box)</itemize>Tutte queste funzioni  sono usate per fare il cast di argomenti di funzione. Le vedretenegli esempi, e capirete se &egrave; il caso di usarle semplicemente guardando alledichiarazioni delle funzioni.Come potrete vedere pi&ugrave; sotto nella gerarchia delle classi, tutti i GtkWidgetssono derivati dalla classe base GtkObject. Ci&ograve; significa che potete usare unwidget in ogni posto in cui una funzione richiede un oggetto - semplicementeusate la macro GTK_OBJECT().Per esempio:<tscreen><verb>gtk_signal_connect(GTK_OBJECT(button), "clicked",                   GTK_SIGNAL_FUNC(callback_function), callback_data);</verb></tscreen> Questo fa il cast del bottone in un oggetto e fornisce alla chiamata di ritornoun cast al puntatore a funzione.Molti oggetti grafici sono anche contenitori. Se guardate alla gerarchia delleclassi pi&ugrave; sotto, vedrete che molti oggetti grafici sono derivati dalla classeGtkContainer. Ognuna di queste classi pu&ograve; essere usata, con la macro GTK_CONTAINER,come argomento per funzioni che richiedono un contenitore.Sfortunatamente, in questo tutorial non si parler&agrave; in modo estensivo di queste macro,ma raccomando di dare un'occhiata ai file header di GTK. Pu&ograve; essere una cosa moltoeducativa. Infatti, non &egrave; difficile imparare come funziona un oggetto solo guardandole dichiarazioni delle funzioni.<!-- ----------------------------------------------------------------- --><sect1>Gerarchia degli Oggetti Grafici<p>Ecco, per vostro riferimento, la gerarchia delle classi usata per implementare glioggetti grafici. <tscreen><verb>  GtkObject   +GtkData   | +GtkAdjustment   | `GtkTooltips   `GtkWidget     +GtkContainer     | +GtkBin     | | +GtkAlignment     | | +GtkEventBox     | | +GtkFrame     | | | `GtkAspectFrame     | | +GtkHandleBox     | | +GtkItem     | | | +GtkListItem     | | | +GtkMenuItem     | | | | `GtkCheckMenuItem     | | | |   `GtkRadioMenuItem     | | | `GtkTreeItem     | | +GtkViewport     | | `GtkWindow     | |   +GtkColorSelectionDialog     | |   +GtkDialog     | |   | `GtkInputDialog     | |   `GtkFileSelection     | +GtkBox     | | +GtkButtonBox     | | | +GtkHButtonBox     | | | `GtkVButtonBox     | | +GtkHBox     | | | +GtkCombo     | | | `GtkStatusbar     | | `GtkVBox     | |   +GtkColorSelection     | |   `GtkGammaCurve     | +GtkButton     | | +GtkOptionMenu     | | `GtkToggleButton     | |   `GtkCheckButton     | |     `GtkRadioButton     | +GtkCList     | +GtkFixed     | +GtkList     | +GtkMenuShell     | | +GtkMenuBar     | | `GtkMenu     | +GtkNotebook     | +GtkPaned     | | +GtkHPaned     | | `GtkVPaned     | +GtkScrolledWindow     | +GtkTable     | +GtkToolbar     | `GtkTree     +GtkDrawingArea     | `GtkCurve     +GtkEditable     | +GtkEntry     | | `GtkSpinButton     | `GtkText     +GtkMisc     | +GtkArrow     | +GtkImage     | +GtkLabel     | | `GtkTipsQuery     | `GtkPixmap     +GtkPreview     +GtkProgressBar     +GtkRange     | +GtkScale     | | +GtkHScale     | | `GtkVScale     | `GtkScrollbar     |   +GtkHScrollbar     |   `GtkVScrollbar     +GtkRuler     | +GtkHRuler     | `GtkVRuler     `GtkSeparator       +GtkHSeparator       `GtkVSeparator</verb></tscreen><!-- ----------------------------------------------------------------- --><sect1>Oggetti senza Finestre<p>Gli oggetti seguenti non hanno una finestra associata. Se volete catturare degli eventi, dovrete usare l'oggetto GtkEventBox. Vedete anche la sezione su<ref id="sec_The_EventBox_Widget" name="Il Widget EventBox"><tscreen><verb>GtkAlignmentGtkArrowGtkBinGtkBoxGtkImageGtkItemGtkLabelGtkPixmapGtkScrolledWindowGtkSeparatorGtkTableGtkAspectFrameGtkFrameGtkVBoxGtkHBoxGtkVSeparatorGtkHSeparator</verb></tscreen><p>Proseguiremo la nostra esplorazione di GTK esaminando uno alla volta tuttigli oggetti, creando qualche semplice funzione per mostrarli. Un'altrabuona sorgente &egrave; il programma testgtk.c che viene fornito con GTK. Potetetrovarlo in gtk/testgtk.c.<!-- ***************************************************************** --><sect>Il Widget Bottone (Button)<!-- ***************************************************************** --><!-

⌨️ 快捷键说明

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