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 :

Passer 2 structs a la function callback


Sujet :

GTK+ avec C & C++

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Portugal

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2009
    Messages : 27
    Points : 37
    Points
    37
    Par défaut Passer 2 structs a la function callback
    Bonjour, Je voudrais savoir comment je passe 2 structs pour lá function callback. Quelq'un a une idée?
    Merci.

  2. #2
    Membre habitué

    Inscrit en
    Mai 2005
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 132
    Points : 171
    Points
    171
    Par défaut
    Bonjour,

    parce que il n'y a qu'un pointer pour data en callback, tu dois faire

    typedef struct {
    STRUCT1 *struct1;
    STRUCT2 *struct2;
    } STRUCT_A_CALLBACK;
    et en callback

    STRUCT_A_CALLBACK *my_struct = (STRUCT_A_CALLBACK*)user_data;
    STRUCT1 *struct1 = my_struct->struct1;
    STRUCT2 *struct2 = my_struct->struct2;
    Je ne sais pas d'autre solution.
    Bonne chance.

    Fredy "KRUGER"

  3. #3
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Points : 2 002
    Points
    2 002
    Par défaut
    C'est effectivement la seule solution. Si les structures sont de même type et que le nombre d'élément est connu, il peu aussi passer un tableau de structures en paramètre.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Portugal

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2009
    Messages : 27
    Points : 37
    Points
    37
    Par défaut
    Alors mon problem c'est ça:
    j'ai une interface glade, dans cette inteface j'ai une object avec 5 onglet. J'ai déjà creé 2 structures, la premier pour controler lá fenêtre principale:

    typedef struct{
    GtkBuilder *build;
    GtkWidget *window;
    }builder;

    et la deuxiéme seulement pour controler les objets dans lá premier onglet:

    typedef struct{
    GtkWidget *button;
    GtkWidget *label;
    GtkWidget *label2;
    }firstab;

    Parfois, je besoin passer deux ou plus objets appartenant a différents structures, par example:
    Je besoin changer le titre de lá fenêtre principale et le titre d'une label. Je dois passer le widget window et le widget label a la callback, mais ils sont des structures différents. Je suis en train de travailler avec des modules, c'est ça mon problem! Est-ce qu'il y a d'autres moyens pour faire ça? extern, pointeur vers la fonction? Merci.

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

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

    Informations forums :
    Inscription : Février 2008
    Messages : 2 303
    Points : 4 967
    Points
    4 967
    Billets dans le blog
    5
    Par défaut
    Une idée parmi tant d'autres.

    Si tu as le pointeur de l'onglet dans le callback appelé, tu peux remonter jusqu'au widget parent de ton choix avec la fonction gtk_widget_get_parent_window ();.

    Une autre idée.

    Propager le pointeur GtkBuilder *builder; dans la structure firstab. Tu pourras ainsi obtenir n'importe quel pointeur de ton interface.

  6. #6
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Points : 2 002
    Points
    2 002
    Par défaut
    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
    28
    29
    typedef struct 
    {
       GtkWidget *button;
       GtkWidget *label;
       GtkWidget *label2;
    } FirstTab;
     
    typedef struct 
    {
       GtkWidget *button;
       GtkWidget *label;
       GtkWidget *label2;
    } SecondTab;
     
    typedef struct 
    {
       GtkWidget *button;
       GtkWidget *label;
       GtkWidget *label2;
    } ThirdTab;
     
    typedef struct
    {
       GtkBuilder *build;
       GtkWidget *window;
       FirstTab tab1; 
       SecondTab tab2;
       ThirdTab tab3;
    } Gui;
    Bon, y a moyen de faire plus propre, mais le principe est là : tu centralises dans une structure représentant ton interface graphique, ses différents éléments. En passant juste un pointeur vers ta structure de type Gui, tu auras accès à tous les éléments de l'interface. Et pour ceux que tu ne stockes pas dans une variable, et que tu n'utilises qu'occasionnellement, il te reste toujours GtkBuilder pour y accéder.

    Au fait, évite le nommage First, Second, Third, etc., utilise plutôt un nom explicite indiquant le rôle de l'onglet.

Discussions similaires

  1. [Débutant] Passer des données entre les fonctions callback
    Par Nouk_Lea dans le forum Interfaces Graphiques
    Réponses: 10
    Dernier message: 18/02/2009, 17h11
  2. Réponses: 4
    Dernier message: 01/10/2008, 12h37
  3. Réponses: 3
    Dernier message: 28/09/2007, 12h44
  4. Traduction C++/Delphi DLL et function Callback
    Par Crafton dans le forum Langage
    Réponses: 12
    Dernier message: 23/02/2006, 10h55
  5. passer unee struct dans un buffer (char *)
    Par baert dans le forum C++
    Réponses: 2
    Dernier message: 20/02/2006, 22h49

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