Bonjour, je souhaite toutes les x millisecondes dessiner un point dans un canevas gnome, jusque là pas de problème.
Pour lui indiquer où dessiner, j'ai choisi de créer une structure que je passe en paramètre à chaque fonction ayant besoin d'accéder au canevas.
Dans mon main je définis donc ma fenetre qui va pouvoir être passée en paramètre à chaque fonction, par exemple aux fonctions modif_amplitude et modif_frequence :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 struct Necessaire { GtkWidget* pCanvas; GnomeCanvasItem* pVoie1; GnomeCanvasItem* pVoie2; };
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 int main(int argc, char* argv[]) { struct Necessaire *fenetre=NULL; fenetre = g_malloc(sizeof(struct Necessaire)); ... fenetre->pCanvas = gnome_canvas_new_aa(); ... g_signal_connect(G_OBJECT(bt1),"clicked",G_CALLBACK(modif_amplitude),(gpointer*)fenetre); g_signal_connect(G_OBJECT(bt2),"clicked",G_CALLBACK(modif_frequence),(gpointer*)fenetre); }
Voici les fonctions :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 static gint modif_amplitude(GtkWidget* widget, gpointer data){ struct Necessaire *fenetre; fenetre = (struct Necessaire*)data; gtk_object_destroy(GTK_OBJECT(fenetre->pVoie1)); gtk_object_destroy(GTK_OBJECT(fenetre->pVoie2)); dessiner(fenetre,(double)(100.0*sin(j++/20.0)+200.0),5.0); return TRUE; } static gint modif_frequence(GtkWidget* widget, gpointer data){ struct Necessaire *fenetre; fenetre = (struct Necessaire*)data; g_timeout_add(temps,(gpointer)modif_amplitude,(gpointer*)fenetre); return 0; }
Et voilà le problème : lorsque je clique sur bouton1 pas de problème la fonction modif_amplitude recoit bien le paramètre et sait où supprimer et redessiner. Par contre pour le g_timeout_add , je n'arrive pas à passer la fenetre en paramètre et le programme plante instantanèment :s
Merci à vous d'avoir lu jusque là.
Partager