Gtk - Fonction callback
Résolu/Fermé
bonzime
Messages postés
39
Date d'inscription
jeudi 14 août 2008
Statut
Membre
Dernière intervention
12 juin 2010
-
9 déc. 2008 à 10:12
loupius - 10 déc. 2008 à 03:33
loupius - 10 déc. 2008 à 03:33
A voir également:
- Gtk - Fonction callback
- Fonction si et - Guide
- Fonction moyenne excel - Guide
- Fonction miroir - Guide
- Fonction somme excel - Guide
- Fonction remplacer word - Guide
1 réponse
>> Une fonction callback doit être de la forme
>> void nom_de_la_fonction(GtkWidget *widget, gpointer data)
>>
>> Doit-elle être forcément sous cette forme? Peut-on intégrer d'autres type de variables et appeller simplement la fonction en intégrant les données nécessaires ?
On n'a pas le choix (sinon il aurait fallu créer une fonction g_signal_connect par type de variable), mais cela ne pose pas de problème puisque par un pointeur on peut passer n'importe quel type de données; de plus, si l'on a besoin de passer plusieurs variables, il suffit de passer une structure.
>> Seulement je ne comprends pas très bien comment marche le gpointer data. Comment va t il chercher la donnée supplémentaire à l'exécution de la fonction ? Et comment spécifier cette donnée ?
La réponse est dans la question:
>> void nom_de_la_fonction(GtkWidget *widget, gpointer data)
>>
>> Doit-elle être forcément sous cette forme? Peut-on intégrer d'autres type de variables et appeller simplement la fonction en intégrant les données nécessaires ?
On n'a pas le choix (sinon il aurait fallu créer une fonction g_signal_connect par type de variable), mais cela ne pose pas de problème puisque par un pointeur on peut passer n'importe quel type de données; de plus, si l'on a besoin de passer plusieurs variables, il suffit de passer une structure.
>> Seulement je ne comprends pas très bien comment marche le gpointer data. Comment va t il chercher la donnée supplémentaire à l'exécution de la fonction ? Et comment spécifier cette donnée ?
La réponse est dans la question:
int main(int argc, char **argv) { MainWindow* pApp; ... /* Connexion du signal "activate" du GtkEntry */ g_signal_connect (G_OBJECT(pApp->pEntry), "activate", G_CALLBACK(OnUpdate), (gpointer)pApp); /* par le cast, pApp est tranformé en type gpointer (c'est un peu l'équivalent d'un pointeur de type void)*/ ... } /* Fonction callback exécutée lors du signal "activate" */ void OnUpdate(GtkWidget* pEntry, gpointer data) { MainWindow* pApp; /* Récupération de data */ pApp = (MainWindow*)data; /* par le cast, pApp est récupéré comme un pointeur de type MainWindow */ ... }