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 :

Salutations + Comment passer plus d'un pointeur comme argument au G_CALLBACK ?


Sujet :

GTK+ avec C & C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 13
    Par défaut Salutations + Comment passer plus d'un pointeur comme argument au G_CALLBACK ?
    Bonjour,

    Tout d'abord bonjour à toutes & tous, je débute sur ce forum mais également avec GTK

    Voici ma question et merci d'avance pour votre aide :

    Je souhaite passer deux pointeurs à une fonction callback appelée par un g_signal_connect. Je n'ai pas d'erreur de compilation, mais je ne récupère pas les mêmes adresses, une fois transmises à la fonction (voir les 2x2 printf) :

    (Le but est de synchroniser une glissière et une barre de progression)

    Dans le header :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    typedef struct DeuxPointeurs DeuxPointeurs;
    struct DeuxPointeurs
    {
        GtkWidget* pSource;
        GtkWidget* pCible;
    };
    Dans le main :

    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
    DeuxPointeurs stGliss1_Barre2;
    DeuxPointeurs* pGliss1_Barre2 = &stGliss1_Barre2;
     
    stGliss1_Barre2.pCible = gtk_progress_bar_new();
    stGliss1_Barre2.pSource = gtk_hscale_new_with_range(0, 1, 0.01);
     
    printf("Adresse 1 : %d \n",pGliss1_Barre2->pSource);
    printf("Adresse 2 : %d \n",pGliss1_Barre2->pCible);
     
    g_signal_connect(G_OBJECT(stGliss1_Barre2.pSource), "value-changed", G_CALLBACK(fStatutGliss_1),pGliss1_Barre2);
     
    void fStatutGliss_1(DeuxPointeurs* data)
    {
        printf("Adr data : %d \n",data->pSource);
        printf("Adr data : %d \n",data->pCible);
    }

  2. #2
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 309
    Billets dans le blog
    5
    Par défaut
    Salut et bienvenu dans le monde merveilleux de Gtk+

    Je suppose que ton code est un code test. Déclarer un pointeur égale à l'adresse d'une structure ne sert pas à grand chose. mais bon, si ca te permet d'appréhender le fonctionnement des pointeurs, pourquoi pas.

    Ton problème est très simple et bien sûr très classique. Chaque signal de chaque widget demande un prototype de CALLBACK approprié. Pour le signal "value-changed" d'un GtkRange le prototype est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    void                user_function                      (GtkRange *range,
                                                            gpointer  user_data)
    Change ta fonction void fStatutGliss_1(DeuxPointeurs* data); en void fStatutGliss_1(GtkRange *range, DeuxPointeurs* data); et là tu pourras accéder à ton pointeur de structure.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 13
    Par défaut @gerald3d
    Oupss, j'aurais dû ajouter débutant en C...

    En tout cas, merci pour cette réponse claire et précise, qui va m'aider à progresser dans ce monde merveilleux

    Bien cordialement,

  4. #4
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 607
    Par défaut
    On peux aussi envoyer un pointeur sur un tableau de pointeurs
    C'est ma méthode à moi

    Après, je définis des constantes (# define) pour les numéros des entrées du tableau.
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 17/10/2014, 16h08
  2. appel d'une fonction avec pointeur comme argument
    Par airness86180 dans le forum Débuter
    Réponses: 1
    Dernier message: 06/03/2009, 13h34
  3. Comment passer un groupe de control en argument d'une fonction
    Par medkarim dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 02/10/2008, 13h42
  4. comment passer plus d'une variable dans une URL
    Par death_style dans le forum Langage
    Réponses: 2
    Dernier message: 06/12/2007, 22h57
  5. Réponses: 2
    Dernier message: 17/10/2005, 12h09

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