Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1286 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [GTK] probleme de lancement de fonction C a l'aide d'un bouton

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[GTK] probleme de lancement de fonction C a l'aide d'un bouton

n°1222458
mrpp
Posté le 13-10-2005 à 19:59:11  profilanswer
 

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. :hello:

mood
Publicité
Posté le 13-10-2005 à 19:59:11  profilanswer
 

n°1222464
Taz
bisounours-codeur
Posté le 13-10-2005 à 20:09:36  profilanswer
 

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.


Message édité par Taz le 13-10-2005 à 20:10:07
n°1222470
mrpp
Posté le 13-10-2005 à 20:23:57  profilanswer
 

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.

n°1222473
Taz
bisounours-codeur
Posté le 13-10-2005 à 20:28:26  profilanswer
 

gtk.org

n°1222477
mrpp
Posté le 13-10-2005 à 20:32:37  profilanswer
 

ben je suis bien avance

n°1222510
Taz
bisounours-codeur
Posté le 13-10-2005 à 21:12:41  profilanswer
 

...
 
sur gtk.org, t'as l'exemple avec le helloworld ...

n°1222615
Emmanuel D​elahaye
C is a sharp tool
Posté le 14-10-2005 à 00:09:15  profilanswer
 

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.


callback(..., void *p_user)
{
   T*p = p_user;
 
   ... = p->A;
}
 
f()
{
   T data;
   data.A = ... ;
 
   fun (..., callback, &data);
 
}


Message édité par Emmanuel Delahaye le 14-10-2005 à 00:09:58

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1222621
Taz
bisounours-codeur
Posté le 14-10-2005 à 00:35:36  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [GTK] probleme de lancement de fonction C a l'aide d'un bouton

 

Sujets relatifs
Déclaration d'amitié pour fonction générique.Problème avec hidden
Problème avec hiddenFonction qui modifie un char *
[Probleme] Pointeurs de fonction dans une mapFonction MySQL désapprouvé
petit problème de modélisationaide sur un sript de sauvegarde
[C++] pbl d'appel de fonction 
Plus de sujets relatifs à : [GTK] probleme de lancement de fonction C a l'aide d'un bouton


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR