


Contenu :
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
}
|
|
|