Recherche personnalisée

Atelier N°3 : Menus, Fichiers et zones de texte



Atelier N° 1: Séance d'introduction

Contenu :

  • 1 : Création des menus
  • 2 : Ajout de la zone de texte
  • 3. Lecture, Enregistrement à partir d’un fichier

1 Création des menus

Nous aurons besoin de 3 cadres :

·         Un cadre pour la barre des menus : vcadreMenu

·         Un cadre pour les autres widgets de la fenêtre : vcadreCentral

·         Un cadre principal comme conteneur des deux cadres précédents : vcadrePrincipal

Etape1 : Création du squelette de l’application

#include <stdlib.h>

#include <gtk/gtk.h>

GtkWidget *fenetre;

GtkWidget *vcadrePrincipal;

GtkWidget *vcadreMenu;

GtkWidget *vcadreCentral;

int main(int argc, char **argv)

{

gtk_init(&argc, &argv);

/* Création de la fenetre */

fenetre = gtk_window_new(GTK_WINDOW_TOPLEVEL);

gtk_window_set_title(GTK_WINDOW(fenetre), "Atelier 3-1");

gtk_window_set_default_size(GTK_WINDOW(fenetre), 320, 200);

g_signal_connect(G_OBJECT(fenetre), "destroy", G_CALLBACK(gtk_main_quit),NULL);

gtk_widget_show_all(fenetre);

gtk_main();

return EXIT_SUCCESS;

}

Etape 2 : création des cadres

Remplacer les points d’interrogation par des valeurs appropriées

/* Création des cadres */

vcadrePrincipal = gtk_vbox_new( ?, 0);

vcadreMenu = gtk_vbox_new( ?, 0);

vcadreCentral = gtk_vbox_new( ?, 0);

gtk_container_add(GTK_CONTAINER(fenetre), vcadrePrincipal);

gtk_box_pack_start(GTK_BOX(vcadrePrincipal), vcadreMenu, ?, ?, 0);

gtk_box_pack_start(GTK_BOX(vcadrePrincipal), vcadreCentral, ?, ?, 0);

Etape 3 : Création des menus :

-          Déclarations :

o        GtkWidget *barre; // Barre des menus

o        GtkWidget *menu; // menu

o        GtkWidget *mnuElement; // élément de menu

-          Création de la barre des menus : gtk_menu_bar_new

-          Création du menu : gtk_menu_new

-          Création des éléments de menu (Ouvrir, Enregistrer, Fermer, Quitter)

o        Création: mnuElement = gtk_menu_item_new_with_label("Intitulé_élément");

o        Ajout au menu: gtk_menu_shell_append(GTK_MENU_SHELL(menu), mnuElement);

-          Association du signal "activate" de l'élément "Quitter"  à la fonction quitter (qu’il faut définir, il doit tout simplement appeler la fonction gtk_main_quit pour terminer le programme.)

-          Création de l’élément de menu « Fichier » :
mnuElement = gtk_menu_item_new_with_label("Fichier");

-          Définition du menu "menu" comme sous menu de l'élément fichier : gtk_menu_item_set_submenu(GTK_MENU_ITEM(mnuElement), menu)

-          Ajout de l’élément de menu "Fichier" à la barre des menus : gtk_menu_shell_append(GTK_MENU_SHELL(barre), mnuElement);

-          Ajout du menu à vcadreMenu :
gtk_box_pack_start(GTK_BOX(vcadreMenu), barre, ?, ?, 0);

Etape 4 : Exécuter et tester l’application:

2 Ajout d’une zone de texte dans le cadre central

-          Déclaration : GtkWidget *txtFichier;

-          Création : gtk_text_view_new

-          Ajouter la zone de texte dans le cadre central

3 Lecture, Enregistrement dans un fichier

Etape 1 : Définition de la commande ouvrir

-          Associer le signal « activate » de la commande ouvrir à la fonction ouvrir

-          Dans la fonction

-          Le contenu du fichier « c:\test.txt » doit être copié dans une chaîne de caractère :

-          gchar *contenu=NULL;

-          g_file_get_contents("c:/test.txt",&contenu,-1,NULL); //nombre_caractères=-1 pour lire tous le contenu du fichier.

-          Pour afficher le contenu dans la zone de texte il faut l’ajouter dans l’objet de type GtkTextBuffer associé.

o        Déclaration : GtkTextBuffer* b;

o        Récupération du buffer de la zone de texte : b=gtk_text_view_get_buffer(GTK_TEXT_VIEW(txtFichier));

o        Insertion du contenu à l’emplacement du curseur dans la zone de texte :  gtk_text_buffer_insert_at_cursor(b,  contenu, -1); //nombre_octets=-1 signifie que tous le  contenu du fichier sera affiché.

o        Libérer l’espace mémoire occupé par contenu : free(contenu).

Etape 2 : Définition de la commande Enregistrer

-          Associer le signal « activate » de la commande enregistrer à la fonction Enregistrer

-          Dans la fonction Enregistrer :

-              Déclarations :

o        gchar *contenu=NULL;

o        GtkTextBuffer* b;

-          Récupérer dans b le buffer associé à la zone de texte.

-          Deux pointeurs de type GtkTextIter sont utilisés pour marquer la zone à récupérer du buffer (début et fin)

o        GtkTextIter debut;

o        GtkTextIter fin;

-          Comme nous voulons récupérer la totalité de la zone de texte, utilisons la fonction gtk_text_buffer_get_bounds : gtk_text_buffer_get_bounds (b, &debut, &fin);

-          Maintenant debut pointe sur le début du buffer et fin pointe sur la fin du buffer

-          Récupération du contenu : contenu = gtk_text_buffer_get_text (b, &debut, &fin, FALSE); //la valeur FALSE signifie que les caractères cachés ne seront pas récupérés.

-          Enregistrement : g_file_set_contents("c:/test.txt",contenu,-1,NULL);

Remarque : la g_file_set_content n’est disponible qu’à partir de la version 2.8, si vous avez une version moins récente alors utiliser la fonction fprintf

Etape 3 : Définition de la commande Fermer

Cette commande vide le contenu de la zone de texte :

fermer(){ GtkTextBuffer* b;

         b=gtk_text_view_get_buffer(GTK_TEXT_VIEW(txtFichier));

         gtk_text_buffer_get_bounds (b, &debut, &fin);

         gtk_text_buffer_delete(b,&debut,&fin); // vide le buffer

         }


calle
calle
calle

Suivre la vie de ce site RSS -
HitMaroc.net
Formation GoogleCe site est listé dans la catégorie Informatique : Programmation informatique Dictionnaire