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
    Membre confirm�
    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
    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 exp�riment�

    Inscrit en
    Mai 2005
    Messages
    132
    D�tails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 132
    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
    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
    Membre confirm�
    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
    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 315
    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 315
    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
    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, 16h11
  2. R�ponses: 4
    Dernier message: 01/10/2008, 11h37
  3. R�ponses: 3
    Dernier message: 28/09/2007, 11h44
  4. Traduction C++/Delphi DLL et function Callback
    Par Crafton dans le forum Langage
    R�ponses: 12
    Dernier message: 23/02/2006, 09h55
  5. passer unee struct dans un buffer (char *)
    Par baert dans le forum C++
    R�ponses: 2
    Dernier message: 20/02/2006, 21h49

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