GtkFr - Cours Gtk+-2

LesFenetresAvecBarresDeDefilement

PageAccueil :: LesNews :: Telechargement :: Liens :: Forum :: LeChat :: Contact
DerniersChangements :: DerniersCommentaires :: ParametresUtilisateur :: Vous êtes 38.107.191.94
<< La sélection des fichiers LeTutorial Les Zones de texte >>


Les fenêtres avec barres de défilement

1. Introduction

Nous allons cette fois voir un widget qui permet d'ajouter des barres de défilement au widget qui sera son enfant. Il s'agit d'un widget container qui s'appelle GtkScrolledWindow.

1.1 Hiérarchie

GObject -> GtkObject -> GtkWidget -> GtkContainer -> GtkBin? -> GtkScrolledWindow

2. Utilisation de base

2.1 Création

Comme vous pouvez vous y attendre, la fonction de création est comme toutes les autres, c'est à dire prévisible.
GtkWidget* gtk_scrolled_window_new(GtkAdjustment? *hadjustment, GtkAdjustment? *vadjustment);
Les paramètres hadjustment et vadjustment permettent de définir les propriétés des barres de défilement. L'objet GtkAdjustment? permet dans notre cas, de définir (entre autres) la valeur minimale que peut prendre la barre de défilement et le pas de celle-ci.
Mais à moins de connaître exactement tous ces paramètres, il vaut mieux laisser faire Gtk, et mettre hadjustment et vadjustment à NULL.

2.2 Ajout du widget enfant.

Pour cela, il y a deux cas différents. Si par exemple le widget enfant a la capacité d'avoir ses propres barres de défilements, il suffit d'utiliser la fonction gtk_container_add.

Par contre, dans le cas ou le widget ne possède pas cette capacité, il faudra utiliser cette fonction :
void gtk_scrolled_window_add_with_viewport(GtkScrolledWindow *scrolled_window, GtkWidget *child);
Avec cette fonction, Gtk va créer ce qul s'appelle un viewport (qui peut avoir des barres de défilement) et va insérer l'enfant dans ce viewport.
Seuls les widgets GtkTreeView, GtkTextView, et GtkLayout? ont la possibilité d'avoir des barres défilements. Pour les autres widgets (comme les GtkHBox, GtkVBox, ...) il faudra utiliser la deuxième fonction.

2.3 Affichage des barres de défilement.

Par défaut, les barres de défilement s'affichent automatiquement (que ce soit la barre horizontale ou verticale). Il se peut que, par exemple, vous n'ayez besoin que de la barre verticale. Dans ce cas vous ne voulez sûrement pas avoir de barre de défilement horizontale. La solution à votre problème est cette fonction :
void gtk_scrolled_window_set_policy (GtkScrolledWindow *scrolled_window, GtkPolicyType? hscroll_policy, GtkPolicyType? vscroll_policy);
Les paramètres hscroll_policy et vscroll_policy peuvent prendre trois paramètres :
Au contraire, pour savoir si elles sont affichées ou pas, il y a la fonction :
void gtk_scrolled_window_get_policy (GtkScrolledWindow *scrolled_window, GtkPolicyType? *hscroll_policy, GtkPolicyType? *vscroll_policy);

2.4 Construction du programme exemple.

Notre exemple est très simple. Il consiste uniquement à afficher 10 labels les uns au-dessus des autres dans une fenêtre qui n'excèdera pas une taille de 320x200. Voyons à quoi ressemble notre fenêtre si elle n'utilise pas les barres de défilement.

Et voila le résultat, la fenêtre ne respecte pas la condition TAILLE = 320x200. Il faut utiliser le widget GtkScrolledWindow.
#include <stdlib.h>
#include <gtk/gtk.h>

int main(int argc, char* argv[])
{
	GtkWidget* pWindow;
	GtkWidget* pBox;
	GtkWidget *pScrollbar;
	int i;

	gtk_init(&argc, &argv);

	pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
	gtk_window_set_default_size(GTK_WINDOW(pWindow), 320, 200);
	gtk_window_set_title(GTK_WINDOW(pWindow), "GtkScrolledWindow");
	g_signal_connect(G_OBJECT(pWindow),"destroy",G_CALLBACK(gtk_main_quit),0);

	pScrollbar = gtk_scrolled_window_new(NULL, NULL);
	gtk_container_add(GTK_CONTAINER(pWindow),pScrollbar);

	pBox=gtk_vbox_new(FALSE,5);

	gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(pScrollbar), pBox);

	gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(pScrollbar), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);

	for(i = 1 ; i <= 10 ; ++i)
	{
		GtkWidget *pLabel;
		char sTexte[10];

		g_sprintf(sTexte, "Label %d", i);

		pLabel = gtk_label_new(sTexte);

		gtk_box_pack_start(GTK_BOX(pBox), pLabel, FALSE, FALSE, 5);
	}

	gtk_widget_show_all(pWindow);

	gtk_main();

	return EXIT_SUCCESS;
}
Résultats




<< La sélection des fichiers LeTutorial Les Zones de texte >>

Il n'y a pas de commentaire sur cette page. [Afficher commentaires/formulaire]
Apinc