Bonjour, Je voudrais savoir comment je passe 2 structs pour lá function callback. Quelq'un a une idée?
Merci.
Bonjour, Je voudrais savoir comment je passe 2 structs pour lá function callback. Quelq'un a une idée?
Merci.
Bonjour,
parce que il n'y a qu'un pointer pour data en callback, tu dois faire
et en callbacktypedef struct {
STRUCT1 *struct1;
STRUCT2 *struct2;
} STRUCT_A_CALLBACK;
Je ne sais pas d'autre solution.STRUCT_A_CALLBACK *my_struct = (STRUCT_A_CALLBACK*)user_data;
STRUCT1 *struct1 = my_struct->struct1;
STRUCT2 *struct2 = my_struct->struct2;
Bonne chance.
Fredy "KRUGER"
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.
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.
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.
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.
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;
Au fait, évite le nommage First, Second, Third, etc., utilise plutôt un nom explicite indiquant le rôle de l'onglet.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager