IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

GTK+ avec C & C++ Discussion :

Récupérer des varaible dans une CALLBACK


Sujet :

GTK+ avec C & C++

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Distribution

    Informations forums :
    Inscription : Novembre 2006
    Messages : 105
    Par défaut Récupérer des varaible dans une CALLBACK
    Bonjour,
    Je vous explique mon problème, je crée un fenetre avec 2 gtk_entry. J'ai un bouton qui doit agir sur ces 2 entry. Seulement j'ai remarquer que avec je ne sais transferer que une variable.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    int main()
    {
         ... Mon code
         g_signal_connect(G_OBJECT(Btn_Save), "clicked", G_CALLBACK(Enco_Save), entry1, entry2);
    }
     
    void cb_Fonction(GtkWidget *pEntry1, GtkWidget *pEntry2)
    {
         Action a effectuer avec mes widget
    }
    Seulement comme vous pouvez vous doutez, un telle code ne fonctionnera jamais.
    J'ai chercher mais en vain, je ne trouve pas comment je pourrais passer les pointeur de mes deux widget pour etre utilisé dans ma fonction callback.

    En vous remercians

  2. #2
    Membre confirmé Avatar de skip78
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 247
    Par défaut
    Il faut passer par des structures, tout simplement

    Le plus simple si tu as une grosse application, et de créer une structure globale, qui regroupera tous tes widgets, et que tu passes à chaque fois en tant qu'argument de tes callbacks


    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
    25
    26
    27
     
    typedef struct apli{
        GtkWidget *pEntry1;
        GtkWidget *pEntry2;
    }apli;
     
    int main()
    {
         apli* app;
         app->pEntry1 = gtk_entry_new(...)
     
    (...)
     
         g_signal_connect(G_OBJECT(Btn_Save), "clicked", G_CALLBACK(cb_Fonction), app);
    }
     
    void cb_Fonction(GtkWidget *pWidget, gpointer user_data)
    {
         // On recupere l'application
         apli* app;
         app = (apli*)malloc(sizeof(apli));
     
         app = user_data;
     
         // Tu fais ce que tu veux avec tes cheveux :
         app->pEntry1...
    }

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 48
    Par défaut
    Bonjour Skip78,

    un grand merci pour ce post car il me permet de passer mes widgets en argument de mes callbacks.

    Juste une question. J'ai cree ma structure dans un fichier autre.h, pour que ca marche, je suis oblige de creer ma structure de cette facon.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    typedef struct appli{
        GtkWidget *pProgressBar;    
    }appli;
    sinon j'ai des messages d'erreur quand je l'utilise. J'ai essaye de conserver la creation de la structure sans le typedef en ajoutant struct devant la declaration dans le main mais ca me retourne une erreur de syntaxe.

    Est - ce que je peux conserver le typedef ? Je veux dire je ne serai pas fouette par un puriste ?

    LePapat.

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Par défaut
    Je pense que ton problème vient du fait qu'en C, soit tu déclares ta structure de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    struct MaStruct {};
    et ensuite pour l'utiliser tu dois faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    struct MaStruct *foo;
    ou sinon tu fais une approche à base de typedef comme ce que tu décris, auquel cas tu peux faire

  5. #5
    Membre confirmé Avatar de skip78
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 247
    Par défaut
    Hello

    Bien entendu tu peux laisser le typedef puisque tout simplement ...
    je l'avais oublié

    (J'edit de suite)

    Maintenant, si t'as un fouet sous la main, on peut toujours s'arranger

    Bonne journée !

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 48
    Par défaut
    je dois pouvoir trouver ca

    Lepapat

Discussions similaires

  1. Récupérer des info dans une page html
    Par DORBRITZ dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 06/03/2008, 11h13
  2. Réponses: 6
    Dernier message: 18/10/2006, 16h34
  3. [RegEx] Récupérer des données dans une page Web
    Par Pragmateek dans le forum Langage
    Réponses: 8
    Dernier message: 24/05/2006, 19h44
  4. Réponses: 2
    Dernier message: 12/04/2006, 10h00
  5. Récupérer des données dans une page HTML
    Par newdelirium dans le forum Langage
    Réponses: 3
    Dernier message: 26/10/2005, 19h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo