1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
| #include <stdlib.h>
#include <stdio.h>
#include <gtk/gtk.h>
#include <glib/gprintf.h>
#define N 6
//Cette procédure affiche une fenêtre affichant le numéro du bouton correspondant
void fenetreReponse (GtkWidget * wid, gpointer data);
int main (int argc, char **argv) {
GtkWidget *pFenetre,
*pVBox,
*pBouton [N];
/* Franck.H - Il faut un tableau statique ou bien dynamique mais l'adresse
doit etre valide, ce qui ne l'est pas dans ton cas. */
/*gchar *c;*/
gchar c[5];
gtk_init (&argc, &argv);
//Création et définition de la fenêtre globale
pFenetre = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_default_size (GTK_WINDOW(pFenetre), 180, 300);
gtk_window_set_position (GTK_WINDOW(pFenetre), GTK_WIN_POS_CENTER);
gtk_window_set_title (GTK_WINDOW(pFenetre), "Tableau de Valeurs");
/* Franck.H - Inutile ici, un GtkVBox est nettement mieux si reste sur
une seule colonne. */
//Création de la table 7 lignes et 1 colonne
/*pTable = gtk_table_new (6, 1, TRUE);*/
pVBox = gtk_vbox_new (TRUE, 0);
/* Franck.H - Utilise les types de la GLIB, c'est mieux. */
gint i;
for (i=0; i<N; i++) {
//Création de chaque bouton
g_sprintf (c, "%d", i+1);
pBouton[i] = gtk_button_new_with_label (c);
//Insertion de chaque bouton dans la table
/*gtk_table_attach_defaults (GTK_TABLE(pTable), pBouton[i], 0, 1, i, i+1);*/
gtk_box_pack_start (GTK_BOX (pVBox), pBouton[i], TRUE, TRUE, 0);
//Connexion de chaque bouton au signal "clicked"
g_signal_connect (G_OBJECT(pBouton[i]), "clicked", G_CALLBACK(fenetreReponse), &i);
}
//Insertion de le table dans la fenetre
gtk_container_add (GTK_CONTAINER(pFenetre), pVBox);
//Connexion de la fenêtre au signal "destroy"
g_signal_connect (G_OBJECT(pFenetre), "destroy", G_CALLBACK(gtk_main_quit), NULL);
//Affichage de la fenêtre globale et tout son contenu
gtk_widget_show_all (pFenetre);
gtk_main ();
return EXIT_SUCCESS;
}
void fenetreReponse (GtkWidget * wid, gpointer data) {
GtkWidget *pFenetre, *pLabel;
/* Franck.H - Il faut un tableau statique ou bien dynamique mais l'adresse
doit etre valide, ce qui ne l'est pas dans ton cas. */
/*gchar *c;*/
gchar c[5];
gint * n = data;
g_printf ("%d\n", *n);
/* Franck.H - Creation d'une boite de dialogue, bien mieux ici. */
pFenetre = gtk_dialog_new_with_buttons (
"Fenetre de reponse...",
NULL,
GTK_DIALOG_MODAL,
GTK_STOCK_OK, GTK_RESPONSE_OK,
NULL
);
//Création du label et insertion dans la fenêtre
g_sprintf (c, "%d", *n);
pLabel = gtk_label_new (c);
gtk_box_pack_start (
GTK_BOX (GTK_DIALOG (pFenetre)->vbox), pLabel, TRUE, TRUE, 0
);
gtk_widget_show_all (GTK_DIALOG (pFenetre)->vbox);
//Affichage de la fenêtre
switch (gtk_dialog_run (GTK_DIALOG (pFenetre)))
{
case GTK_RESPONSE_OK:
default:
break;
}
/* Franck.H - Pas oublier de detruire la boite de dialogue. */
gtk_widget_destroy (pFenetre);
(void) wid;
} |
Partager