probleme de lancement de fonction C a l'aide d'un bouton [GTK] - C - Programmation
Marsh Posté le 13-10-2005 à 20:09:36
ben avec l'argument qui sert à ça.
"clicked" void user_function (GtkButton *button,
gpointer user_data);
edit: donc ton callback est pas bon de toutes façons.
Marsh Posté le 13-10-2005 à 20:23:57
Qu'est ce qu'il a de pas bon mon Callback. Si j'oublie ma fonction il marche très bien.
J'ai commencé à travailler sur un livre et la structure que j'utilise est trouvé à l'intérieur. Maintenant je débute et il est possible (peut être même sur) que je me trompe de temps à autre. donc qu'est ce qu'il a de pas bon mon callback?
je vais essayer de voir ca
"clicked" void user_function (GtkButton *button,
gpointer user_data);
qui n'est pas dans mon livre, mais bon google mele dira surement
merci.
Marsh Posté le 14-10-2005 à 00:09:15
mrpp a écrit : mais c'est super moche et ca marche pas du tout d'ailleurs. (Bon je m'en doutais un peu, ça marche rarement quand j'essaye de trouver la syntaxe sur un langage nouveau) donc si vous pouviez me montrer la lumiére ca m'aiderait vachtement à finir tout ça ce programme. |
Comme souvent, le callback est muni d'un pointeur pour passer les données. Le principe est de passer l'adresse des données. Si il y en a plusieurs, comme ici, le plus simple est de définir une structure et de passer son adresse. Dans le callback, on définit un pointeur du même type que l'on initialise avec la valeur paramètre void *. Cette technique est extrêmement courante dans ce genre de programmation par évènement.
|
Marsh Posté le 14-10-2005 à 00:35:36
oui, enfin je recommanderais pas de passer des données allouée sur la pile dans ce contexte. Ici, on parle d'interfaces graphiques et d'événements (asynchronese).
Donc avant tu fais un petit g_malloc, tu passes le pointeur au callback, et dans le callback, tu g_free
Marsh Posté le 13-10-2005 à 19:59:11
je viens de créer une interface graphique pour une simulation précédemment réalisé en C. Tout marche bien sauf que je vois pas trop comment lancer mon ancienne fonction. Je l'ai incluse dans une librairie que j'ai crée et elle est du type
int bleu(double A, double B, int C,int D,int E)
mon idée était qu'une fois tous les paramétres rentrés grace à l'apllication graphique on appuie sur Ok et le programme en C fait ses calculs dans son coin avant que le programme se ferme.
mais mon problème vient de ma définition de fonction dans GTK, pour le moment j'ai ça
gint traitement(GtkWidget *OK,GtkWidget *Fenetre) /*la fonction qui se lance quand on clique sur le bouton OK*/
{
gtk_widget_hide_all(Fenetre); /* les fenetres sont cachés pour éviter qu'on ne puisse réappuyer sur les boutons */
bleu(A, B, C, D, E); /*le programme que je veux lancer*/
return 0;
}
int main(int argc, char *argv[])
{
.... /*ce qui se passe quand j'appuie sur le bouton*/
gtk_signal_connect(GTK_OBJECT(OK), "clicked", (GtkSignalFunc) traitement, Fenetre);
....
}
Mais ou diable est ce que je dis à traitement de récupérer les valeurs de A, B.... j'ai essayé de le faire comme en C classique
gint traitement(GtkWidget *OK,GtkWidget *Fenetre,double A, double B, int C,int D,int E)
et
gtk_signal_connect(GTK_OBJECT(OK), "clicked", (GtkSignalFunc) traitement(A,B,C,D,E), Fenetre);
mais c'est super moche et ca marche pas du tout d'ailleurs. (Bon je m'en doutais un peu, ça marche rarement quand j'essaye de trouver la syntaxe sur un langage nouveau) donc si vous pouviez me montrer la lumiére ca m'aiderait vachtement à finir tout ça ce programme.