📄 gtk_tut_it-5.html
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"><HTML><HEAD> <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9"> <TITLE>GTK Tutorial: Panoramica sui Widget</TITLE> <LINK HREF="gtk_tut_it-6.html" REL=next> <LINK HREF="gtk_tut_it-4.html" REL=previous> <LINK HREF="gtk_tut_it.html#toc5" REL=contents></HEAD><BODY BGCOLOR="#FFFFFF"><A HREF="gtk_tut_it-6.html">Avanti</A><A HREF="gtk_tut_it-4.html">Indietro</A><A HREF="gtk_tut_it.html#toc5">Indice</A><HR NOSHADE><H2><A NAME="s5">5. Panoramica sui Widget</A></H2><P>La procedura generale di creazione di un widget in GTK prevede i seguenti passi:<OL><LI> gtk_*_new - una delle varie funzioni che servono per greare un nuovo widget.In questa sezione le vedremo tutte in dettaglio.</LI><LI> Connettere tutti i segnali che si vogliono usare alle funzione gestione appfropriate.</LI><LI> Assegnare gli attributi all'oggetto.</LI><LI> Impacchettare l'oggetto in un contenitore usando la chiamate appropriata, per esempio gtk_container_add() o gtk_box_pack_start().</LI><LI> Mostrare l'oggetto con gtk_widget_show().</LI></OL><P>gtk_widget_show() fa sì che GTK sappia che abbiamo terminato di assegnare gliattributi dell'oggetto grafico, e che è pronto per essere visualizzato.Si può anche usare la funzione gtk_widget_hide per farlo sparire di nuovo.L'ordine in cui mostrate gli oggetti grafici non è importante, ma io suggeriscodi mostrare per ultima la finestra, in modo che questa spunti fuori già 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 è un oggetto grafico) nonvengono infatti mostrati finché la finestra stessa non viene mostrata usando lafunzione gtk_widget_show().<P><H2><A NAME="ss5.1">5.1 Casting</A></H2><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à di effettuare il cast sull'elemento dato e lo effettuano realmente.Alcune macro che avrete modo di incontrare sono:<P><UL><LI> GTK_WIDGET(widget)</LI><LI> GTK_OBJECT(object)</LI><LI> GTK_SIGNAL_FUNC(function)</LI><LI> GTK_CONTAINER(container)</LI><LI> GTK_WINDOW(window)</LI><LI> GTK_BOX(box)</LI></UL><P>Tutte queste funzioni sono usate per fare il cast di argomenti di funzione. Le vedretenegli esempi, e capirete se è il caso di usarle semplicemente guardando alledichiarazioni delle funzioni.<P>Come potrete vedere più sotto nella gerarchia delle classi, tutti i GtkWidgetssono derivati dalla classe base GtkObject. Ciò significa che potete usare unwidget in ogni posto in cui una funzione richiede un oggetto - semplicementeusate la macro GTK_OBJECT().<P>Per esempio:<P><BLOCKQUOTE><CODE><PRE>gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(callback_function), callback_data);</PRE></CODE></BLOCKQUOTE> <P>Questo fa il cast del bottone in un oggetto e fornisce alla chiamata di ritornoun cast al puntatore a funzione.<P>Molti oggetti grafici sono anche contenitori. Se guardate alla gerarchia delleclassi più sotto, vedrete che molti oggetti grafici sono derivati dalla classeGtkContainer. Ognuna di queste classi può essere usata, con la macro GTK_CONTAINER,come argomento per funzioni che richiedono un contenitore.<P>Sfortunatamente, in questo tutorial non si parlerà in modo estensivo di queste macro,ma raccomando di dare un'occhiata ai file header di GTK. Può essere una cosa moltoeducativa. Infatti, non è difficile imparare come funziona un oggetto solo guardandole dichiarazioni delle funzioni.<P><H2><A NAME="ss5.2">5.2 Gerarchia degli Oggetti Grafici</A></H2><P>Ecco, per vostro riferimento, la gerarchia delle classi usata per implementare glioggetti grafici.<P><BLOCKQUOTE><CODE><PRE> 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</PRE></CODE></BLOCKQUOTE><P><H2><A NAME="ss5.3">5.3 Oggetti senza Finestre</A></H2><P>Gli oggetti seguenti non hanno una finestra associata. Se volete catturare degli eventi, dovrete usare l'oggetto GtkEventBox. Vedete anche la sezione su<A HREF="gtk_tut_it-13.html#sec_The_EventBox_Widget">Il Widget EventBox</A><P><BLOCKQUOTE><CODE><PRE>GtkAlignmentGtkArrowGtkBinGtkBoxGtkImageGtkItemGtkLabelGtkPixmapGtkScrolledWindowGtkSeparatorGtkTableGtkAspectFrameGtkFrameGtkVBoxGtkHBoxGtkVSeparatorGtkHSeparator</PRE></CODE></BLOCKQUOTE><P>Proseguiremo la nostra esplorazione di GTK esaminando uno alla volta tuttigli oggetti, creando qualche semplice funzione per mostrarli. Un'altrabuona sorgente è il programma testgtk.c che viene fornito con GTK. Potetetrovarlo in gtk/testgtk.c.<P><HR NOSHADE><A HREF="gtk_tut_it-6.html">Avanti</A><A HREF="gtk_tut_it-4.html">Indietro</A><A HREF="gtk_tut_it.html#toc5">Indice</A></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -