📄 gtk_tut_fr.txt
字号:
qui rlisent cette coercition. Les macros que vous rencontrerez le plus sont : +o GTK_WIDGET(widget) +o GTK_OBJECT(object) +o GTK_SIGNAL_FUNC(function) +o GTK_CONTAINER(container) +o GTK_WINDOW(window) +o GTK_BOX(box) Elles sont toutes utiliss pour convertir les paramres des fonctions. Vous les verrez dans les exemples et, en rle gale, vous saurez les utiliser simplement en regardant la dlaration d'une fonction. Comme vous pouvez le voir dans la hiarchie de classes ci-dessous, tous les _G_t_k_W_i_d_g_e_t_s divent d'une classe de base _G_t_k_O_b_j_e_c_t. Ceci signifie que vous pouvez utiliser un widget chaque fois qu'une fonction requiert un objet - il suffit d'utiliser la macro GTK_OBJECT(). Par exemple : gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(fonction_rappel), donnee_de_rappel); Cet appel convertit le bouton en objet et fournit une conversion pour le pointeur de fonction vers la fonction de rappel. De nombreux widgets sont aussi des containers. Si vous regardez la hiarchie de classe ci-dessous, vous remarquerez que beaucoup de widgets viennent de la classe _G_t_k_C_o_n_t_a_i_n_e_r. N'importe lequel de ces widgets peut re utilisavec la macro GTK_CONTAINER pour re passen paramre une fonction qui attend un container. Malheureusement, ces macros ne peuvent re couvertes en dail dans ce didacticiel, Je vous recommande donc de jeter un coup d'oeil sur les fichier en-tes GTK : ils peuvent s'aver tr instructifs. En fait, il n'est pas difficile de comprendre comment fonctionne un widget, il suffit d'udier les dlarations des fonctions. 55..22.. LLaa hhiiaarrcchhiiee ddeess wwiiddggeettss Voici l'arbre de la hiarchie de classes utiliss pour implanter les widgets. GtkObject +-- GtkData | \-- GtkAdjustment | \-- GtkWidget +-- GtkContainer | +-- GtkBin | | +-- GtkAlignment | | +-- GtkFrame | | | *-- GtkAspectFrame | | | | | +-- GtkItem | | | +-- GtkListItem | | | +-- GtkMenuItem | | | | +-- GtkCheckMenuItem | | | | *-- GtkRadioMenuItem | | | | | | | *-- GtkTreeItem | | | | | +-- GtkViewport | | \-- GtkWindow | | +-- GtkDialog | | \-- GtkFileSelection | | | +-- GtkBox | | +-- GtkHBox | | \-- GtkVBox | | +-- GtkColorSelection | | \-- GtkCurve | | | +-- GtkButton | | +-- GtkOptionMenu | | \-- GtkToggleButton | | \-- GtkCheckButton | | \-- GtkRadioButton | | | +-- GtkList | +-- GtkMenuShell | | +-- GtkMenu | | \-- GtkMenuBar | | | +-- GtkNotebook | +-- GtkScrolledWindow | +-- GtkTable | \-- GtkTree | +-- GtkDrawingArea +-- GtkEntry +-- GtkMisc | +-- GtkArrow | +-- GtkImage | +-- GtkLabel | \-- GtkPixmap | +-- GtkPreview +-- GtkProgressBar +-- GtkRange | +-- GtkScale | | +-- GtkHScale | | \-- GtkVScale | | | \-- GtkScrollbar | +-- GtkHScrollbar | \-- GtkVScrollbar | +-- GtkRuler | +-- GtkHRuler | \-- GtkVRuler | \-- GtkSeparator +-- GtkHSeparator \-- GtkVSeparator 55..33.. WWiiddggeettss ssaannss ffeennrree Les widgets suivants n'ont pas de fenre associ. Si vous voulez capturer des ements, vous devez utiliser _G_t_k_E_v_e_n_t_B_o_x. Reportez-vous la section sur ``Le widget EventBox'' GtkAlignment GtkArrow GtkBin GtkBox GtkImage GtkItem GtkLabel GtkPaned GtkPixmap GtkScrolledWindow GtkSeparator GtkTable GtkViewport GtkAspectFrame GtkFrame GtkVPaned GtkHPaned GtkVBox GtkHBox GtkVSeparator GtkHSeparator Nous continuerons notre exploration de GTK en examinant chaque widget tour tour, crnt quelques fonctions simples pour les afficher. Une autre source intessante est le programme _t_e_s_t_g_t_k_._c livravec GTK. Il se trouve dans le rertoire _g_t_k_/ 66.. WWiiddggeettss bboouuttoonnss 66..11.. BBoouuttoonnss nnoorrmmaauuxx On a dpresque vu tout ce qu'il y avait voir sur le widget bouton. Il est tr simple. Cependant, il y a deux fans de crr un bouton. On peut utiliser _g_t_k___b_u_t_t_o_n___n_e_w___w_i_t_h___l_a_b_e_l_(_) pour crr un bouton avec un label, ou _g_t_k___b_u_t_t_o_n___n_e_w_(_) pour crr un bouton vide. Dans ce dernier cas, c'est vous de placer un label ou un pixmap sur celui-ci. Pour ce faire, crz une boe, puis placez vos objets dans celle-ci en utilisant la fonction habituelle _g_t_k___b_o_x___p_a_c_k___s_t_a_r_t, utilisez alors _g_t_k___c_o_n_t_a_i_n_e_r___a_d_d pour placer la boe dans le bouton. Voici un exemple d'utilisation de _g_t_k___b_u_t_t_o_n___n_e_w_(_) pour crr un bouton contenant une image et un label. J'ai sardu reste le code qui cr une boe pour que vous puissiez l'utiliser dans vos programmes. #include <gtk/gtk.h> /* Crtion d'une hbox avec une image et un label. Cette fonction * retourne la boe... */ GtkWidget *xpm_label_box (GtkWidget *parent, gchar *xpm_filename, gchar *label_text) { GtkWidget *box1; GtkWidget *label; GtkWidget *pixmapwid; GdkPixmap *pixmap; GdkBitmap *mask; GtkStyle *style; /* Crtion de la boite pour un xpm et un label */ box1 = gtk_hbox_new (FALSE, 0); gtk_container_border_width (GTK_CONTAINER (box1), 2); /* Choix d'un style de bouton... Je suppose que c'est pour obtenir * la couleur du fond. Si quelqu'un conna la vraie raison, qu'il * m'laire sur ce point. */ style = gtk_widget_get_style(parent); /* Chargement de xpm pour crr une image */ pixmap = gdk_pixmap_create_from_xpm (parent->window, &mask, &style->bg[GTK_STATE_NORMAL], xpm_filename); pixmapwid = gtk_pixmap_new (pixmap, mask); /* Crtion d'un label */ label = gtk_label_new (label_text); /* placement de l'image et du label dans la boe */ gtk_box_pack_start (GTK_BOX (box1), pixmapwid, FALSE, FALSE, 3); gtk_box_pack_start (GTK_BOX (box1), label, FALSE, FALSE, 3); gtk_widget_show(pixmapwid); gtk_widget_show(label); return (box1); } /* Notre fonction de rappel habituelle */ void callback (GtkWidget *widget, gpointer *data) { g_print ("Bonjour - %s a pressen", (char *) data); } int main (int argc, char *argv[]) { /* GtkWidget est le type utilispour dlarer les widgets */ GtkWidget *window; GtkWidget *button; GtkWidget *box1; gtk_init (&argc, &argv); /* Crtion d'une fenre */ window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_title (GTK_WINDOW (window), "Pixmap'd Buttons!"); /* Il est prable de faire cela pour toutes les fenres */ gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (gtk_exit), NULL); /* Configuration du bord de la fenre */ gtk_container_border_width (GTK_CONTAINER (window), 10); /* Crtion d'un bouton */ button = gtk_button_new (); /* Vous devriez re habituvoir ces fonctions maintenant */ gtk_signal_connect (GTK_OBJECT (button), "clicked", GTK_SIGNAL_FUNC (callback), (gpointer) "cool button"); /* Appel de notre fonction de crtion de boe */ box1 = xpm_label_box(window, "info.xpm", "cool button"); /* Placement et affichage de tous nos widgets */ gtk_widget_show(box1); gtk_container_add (GTK_CONTAINER (button), box1); gtk_widget_show(button); gtk_container_add (GTK_CONTAINER (window), button); gtk_widget_show (window); /* Le reste est dans gtk_main */ gtk_main (); return 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -