Documente Academic
Documente Profesional
Documente Cultură
page=page_6
Forums Tutoriels Magazine FAQs Blogs Chat Newsletter tudes Emploi Club
Contacts
p
u
Newsletter Developpez.com b
l
i
Inscrivez-vous gratuitement au Club pour recevoir c
i
t
la newsletter hebdomadaire des dveloppeurs et IT pro
Accueil ALM Java .NET Dv. Web EDI Programmation SGBD Office Solutions d'entreprise Applications Mobiles Systmes
Accueil C Forums C FAQ C Tutoriels C Livres C Compilateurs et outils C Sources C Bibliothques C GTK+
ACCUEIL GTK+ FORUM GTK+ FAQ GTK+ TUTORIELS GTK+ SOURCES GTK+ BIBLIOTHEQUES LIVRES GTK+ OUTILS GTK+
Cours GTK 2
VI-A-1. Cration
Comme toujours, la cration de ces widgets est trs simple. Les fonctions suivantes
permettent de crer respectivement une GtkHBox et une GtkVBox :
Slectionnez
GtkWidget* gtk_hbox_new(gboolean homogeneous, gint spacing);
GtkWidget* gtk_vbox_new(gboolean homogeneous, gint spacing);
Les widgets GtkHBox et GtkVBox n'ont pas de fonctions spcifiques pour l'ajout de
widget. Il faut, pour cela, utiliser les fonctions de GtkBox dont drivent les diffrents
types de box. Les fonctions les plus couramment utilises sont :
Slectionnez
void gtk_box_pack_start(GtkBox* box, GtkWidget* child, gboolean expand, gboolean fill, guint pa
void gtk_box_pack_end(GtkBox* box, GtkWidget* child, gboolean expand, gboolean fill, guint padd
La premire fonction insre les widgets de haut en bas (pour les GtkVBox) ou de
gauche droite (pour les GtkHBox). La seconde fonction fait exactement le contraire,
c'est--dire, de bas en haut pour les GtkVBox et de droite gauche pour les
GtkHBox.
Le paramtre box est bien entendu la GtkBox dans laquelle on veut insrer le widget
child (2me paramtre).
Le paramtre expand n'est utile que si la GtkBox en question n'est pas dfini comme
homogne (homogeneous=FALSE lors de la cration). Dans ce cas, tous les widgets
qui auront t insrs avec la valeur expand=TRUE se partageront tout l'espace libre
de la GtkBox (les widgets avec expand=FALSE n'utiliseront que l'espace qui leur est
ncessaire).
Le paramtre fill permet de dfinir si le widget enfant occupe toute la zone qui lui est
rserve.
Pour vous montrer les effets des diffrents paramtres voici un tableau avec des
captures d'cran avec diffrentes configurations :
Paramtres Captures
GtkVBox :
homogeneous = TRUE
Bouton 1 :
fill = FALSE
Bouton 2 :
fill = FALSE
GtkVBox :
homogeneous = TRUE
Bouton 1 :
fill = FALSE
Bouton 2 :
fill = TRUE
GtkVBox :
homogeneous = FALSE
Bouton 1 :
Expand = FALSE
Bouton 2 :
expand = FALSE
GtkVBox :
homogeneous = FALSE
Bouton 1 :
expand = FALSE
Bouton 2 :
expand = TRUE
fill = FALSE
GtkVBox :
homogeneous = FALSE
Bouton 1 :
expand = FALSE
Bouton 2 :
expand = TRUE
fill = TRUE
VI-A-3. Exemple
Pour montrer les possibilits qu'offrent les GtkBox, nous allons crer une fentre
contenant quatre boutons organiss comme cela :
Maintenant, la question est de savoir comment organiser les diffrentes GtkBox pour
avoir ce rsultat. C'est trs simple, nous avons besoin de deux GtkBox, la premire
verticale, la deuxime horizontale. Voici une image qui vous explique comment nous
devons organiser nos deux GtkBox :
Ici, en rouge c'est la GtkVBox qui est directement ajout la fentre principale. On
va y empiler les widgets de haut en bas avec la fonction gtk_box_pack_start. On va
tout d'abord placer le Bouton 1 , ensuite pour pouvoir ajouter les autres boutons
de gauche droite, il faut ajouter la GtkHBox (en bleu) car on ne peut pas le faire
avec la GtkVBox puisqu'elle est verticale. On ajoute donc ensuite Bouton 2 et
Bouton 3 dans la GtkHBox, et pour finir, on ajoute Bouton 4 dans la GtkVBox.
Voil, une fois que l'on a compris comment organiser les choses, on peut tout faire.
Slectionnez
#include <stdlib.h>
#include <gtk/gtk.h>
gtk_init(&argc,&argv);
pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(pWindow), "Les GtkBox");
gtk_window_set_default_size(GTK_WINDOW(pWindow), 320, 200);
g_signal_connect(G_OBJECT(pWindow), "destroy", G_CALLBACK(gtk_main_quit), NULL);
gtk_container_add(GTK_CONTAINER(pWindow), pVBox);
gtk_widget_show_all(pWindow);
gtk_main();
return EXIT_SUCCESS;
}
Rsultat :
Slectionnez
gboolean gtk_box_get_homogeneous(GtkBox *box);
Entre(s) :
box : la GtkBox.
Slectionnez
void gtk_box_set_homogeneous(GtkBox *box, gboolean homogeneous);
Entre(s) :
box : la GtkBox.
homogeneous : TRUE si l'on veut que box soit homogne, FALSE sinon.
Sortie : rien.
Slectionnez
gint gtk_box_get_spacing(GtkBox *box);
Entre(s) :
box : la GtkBox.
Sortie : gint.
Slectionnez
Entre(s) :
box : la GtkBox.
spacing : espace entre les widgets.
Sortie : rien.
Slectionnez
void gtk_box_pack_start_defaults(GtkBox *box, GtkWidget *widget);
void gtk_box_pack_end_defaults(GtkBox *box, GtkWidget *widget);
void gtk_box_reorder_child(GtkBox *box, GtkWidget *child, gint position);
void gtk_box_query_child_packing(GtkBox *box, GtkWidget *child, gboolean *expand, gboolean
void gtk_box_set_child_packing(GtkBox *box, GtkWidget *child, gboolean expand, gboolean fill, g
Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre
convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge
par les droits d'auteur. Copyright 2013 developpez. Aucune reproduction, mme partielle,
ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images,
etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans
de prison et jusqu' 300 000 de dommages et intrts.