/* Création des boutons */
 button = gtk_button_new_with_label ("Fermer");
 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
 GTK_SIGNAL_FUNC (delete), NULL);
 gtk_table_attach_defaults(GTK_TABLE(table), button, 0,1,1,2);
 gtk_widget_show(button);
 button = gtk_button_new_with_label ("Page suivante");
 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
 (GtkSignalFunc) gtk_notebook_next_page,
 GTK_OBJECT (notebook));
 gtk_table_attach_defaults(GTK_TABLE(table), button, 1,2,1,2);
 gtk_widget_show(button);
 button = gtk_button_new_with_label ("Page précédente");
 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
 (GtkSignalFunc) gtk_notebook_prev_page,
 GTK_OBJECT (notebook));
 gtk_table_attach_defaults(GTK_TABLE(table), button, 2,3,1,2);
 gtk_widget_show(button);
 button = gtk_button_new_with_label ("Position des indicateurs");
 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
 (GtkSignalFunc) rotate_book, GTK_OBJECT(notebook));
 gtk_table_attach_defaults(GTK_TABLE(table), button, 3,4,1,2);
 gtk_widget_show(button);
 button = gtk_button_new_with_label ("Indicateurs/Contours oui/non");
 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
 (GtkSignalFunc) tabsborder_book,
 GTK_OBJECT (notebook));
 gtk_table_attach_defaults(GTK_TABLE(table), button, 4,5,1,2);
 gtk_widget_show(button);
 button = gtk_button_new_with_label ("Oter page");
 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
 (GtkSignalFunc) remove_book,
 GTK_OBJECT(notebook));
 gtk_table_attach_defaults(GTK_TABLE(table), button, 5,6,1,2);
 gtk_widget_show(button);
 gtk_widget_show(table);
 gtk_widget_show(window);
 gtk_main ();
 return 0;
En espérant que ceci vous aide à créer des blocs-notes pour vos applications GTK.

Programmation GTK/Fenêtres avec barres de défilement

Les fenêtres avec barres de défilement servent à créer des zones défilantes à l'intérieur d'une vraie fenêtre. On peut insérer n'importe quel widget dans ces fenêtres, ils seront accessibles quelle que soit leur taille en utilisant les barres de défilement.
La fonction suivante sert à créer une fenêtre avec barre de défilement :
 GtkWidget* gtk_scrolled_window_new (GtkAdjustment *hadjustment,
 GtkAdjustment *vadjustment);
Le premier paramètre est l'ajustement horizontal, et le second l'ajustement vertical. Ils sont presque toujours positionnés à codice_1.
 void gtk_scrolled_window_set_policy (GtkScrolledWindow *scrolled_window,
 GtkPolicyType hscrollbar_policy,
 GtkPolicyType vscrollbar_policy);
Cela permet de configurer le fonctionnement des barres de défilement. Le premier paramètre est la fenêtre à défilement que l'on veut modifier, le second configure le fonctionnement de la barre horizontale et le troisième celui de la barre verticale.
Ce fonctionnement peut être codice_2 ou codice_3. codice_4 décidera automatiquement de votre besoin en barres de défilement, alors que codice_3 mettra toujours celles-ci.
Voici un exemple simple qui place 100 boutons commutateurs dans une fenêtre à défilement. Je n'ai commenté que les parties qui sont nouvelles pour vous.
 #include <gtk/gtk.h>
 void destroy(GtkWidget *widget, gpointer *data)
 gtk_main_quit();

int main (int argc, char *argv[])
 static GtkWidget *window;
 GtkWidget *scrolled_window;
 GtkWidget *table;
 GtkWidget *button;
 char buffer[32];
 int i, j;
 gtk_init (&argc, &argv);
 /* Création d'une boîte de dialogue pour y placer la fenêtre à défilement.
 * Une boîte de dialogue est une fenêtre comme les autres sauf qu'elle contient
 * une vbox et un séparateur horizontal. Ce n'est qu'un raccourci pour créer des
 * zones de dialogue. */
 window = gtk_dialog_new ();
 gtk_signal_connect (GTK_OBJECT (window), "destroy",
 (GtkSignalFunc) destroy, NULL);
 gtk_window_set_title (GTK_WINDOW (window), "dialog");
 gtk_container_border_width (GTK_CONTAINER (window), 0);
 /* Création d'une fenêtre à défilement. */
 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
 gtk_container_border_width (GTK_CONTAINER (scrolled_window), 10);
 /* La gestion des barres est soit GTK_POLICY AUTOMATIC, soit GTK_POLICY_ALWAYS.
 * GTK_POLICY_AUTOMATIC décide automatiquement s'il faut ou non des barres,
 * GTK_POLICY_ALWAYS met toujours des barres
 * Le premier paramètre correspond à la barre horizontale,
 * le second à la barre verticale. */
 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
 GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
 /* Création d'une boîte de dialogue */
 gtk_box_pack_start (GTK_BOX (GTK_DIALOG(window)->vbox), scrolled_window, 
 TRUE, TRUE, 0);
 gtk_widget_show (scrolled_window);
 /* Création d'une table de 10x10 cases. */
 table = gtk_table_new (10, 10, FALSE);
 /* Configure l'espace des lignes et des colonnes de 10 pixels */
 gtk_table_set_row_spacings (GTK_TABLE (table), 10);
 gtk_table_set_col_spacings (GTK_TABLE (table), 10);
 /* Place la table fans la fenêtre à défilement */
 gtk_container_add (GTK_CONTAINER (scrolled_window), table);
 gtk_widget_show (table);
 /* Crée une grille de boutons commutateurs dans la table */
 for (i = 0; i < 10; i++)
 for (j = 0; j < 10; j++) {
 sprintf (buffer, "bouton (%d,%d)\n", i, j);
 button = gtk_toggle_button_new_with_label (buffer);
 gtk_table_attach_defaults (GTK_TABLE (table), button,
 i, i+1, j, j+1);
 gtk_widget_show (button);

/* Ajoute un bouton « Fermer » en bas de la boîte de dialogue */
 button = gtk_button_new_with_label ("Fermer");
 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
 (GtkSignalFunc) gtk_widget_destroy,
 GTK_OBJECT (window));
 /* On met ce bouton en « bouton par défaut ». */
 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area), button, TRUE, TRUE, 0);
 /* Récupère le bouton par défaut. Le fait de presser la touche « Entrée »
 * activera le bouton. */
 gtk_widget_grab_default (button);
 gtk_widget_show (button);
 gtk_widget_show (window);
 gtk_main();
 return(0);
Essayez de changer la taille de la fenêtre et faites attention aux réactions des barres de défilement. On peut aussi utiliser la fonction codice_6 pour configurer la taille par défaut de la fenêtre et des autres widgets.

Programmation GTK/Widgets listes
Le widget codice_1 sert de container vertical pour des widgets codice_2.
Un widget codice_1 possède sa propre fenêtre pour recevoir les événements et sa propre couleur de fond qui est habituellement blanche. Comme il est directement dérivé de codice_4, il peut être traité comme tel en utilisant la macro codice_5 : voir le widget codice_4 pour en savoir plus.
On doit d'abord connaître l'utilisation des GList et des fonctions codice_7 qui leur sont liées pour pouvoir utiliser pleinement le widget codice_1.
Un champ de la structure d'un widget codice_1 nous intéresse particulièrement:
 struct _GtkList
 ...
 GList *selection;
 guint selection_mode;
 }; 
Le champ selection d'un codice_1 pointe sur une liste chaînée de tous les items qui sont sélectionnés, ou vaut codice_11 si aucune sélection n'est faite. Ainsi, pour connaître la sélection courante, on consulte le champ codice_12 mais on ne doit pas le modifier car ses champs internes sont gérés par les fonctions codice_13.
Le champ codice_14 détermine les options de sélection d'un codice_1 et donc le contenu du champ du codice_12. codice_14 peut avoir l'une des valeurs suivantes:
La valeur par défaut est codice_23.

Programmation GTK/Signaux
Un GtkListItem ne crée pas de nouveaux signaux par lui-même, mais hérite de ceux d'un GtkItem. Voir GtkItem::, pour plus d'informations.