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 :

Récupérer le texte d'un MenuItem


Sujet :

GTK+ avec C & C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 176
    Par défaut Récupérer le texte d'un MenuItem
    Bonjour,

    Dans mon application, j'ai un sous-menu dans lequel il y a 3 MenuItem.
    Chaque clic sur un Item a le même but : appeler une fonction qui va ouvrir une nouvelle fenêtre et effectuer des opérations de dessins sur le drawing area correspondant à l'item cliqué.

    Dans les 3 cas , la fonction est la même excepté le drawing area dans lequel on va dessiner. C'est pourquoi j'aimerai trouver un moyen de savoir sur quel Item l'utilisateur a cliqué et le transmettre à ma fonction (afin d'éviter de recopier 3 fois le même code...).

    J'ai lu la documentation et je n'ai pas trouvé de fonction comme " ...get_text... " pour un MenuItem.

    N'y aurait-il donc pas une autre solution ?

  2. #2
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 308
    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 308
    Billets dans le blog
    5
    Par défaut
    Il y a une solution dans cet exemple:

    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
    #define gtk_menu_item_label_set_label(menu_item, label) (gtk_label_set_label(GTK_LABEL(GTK_BIN(menu_item)->child), label))
     
     GtkWidget *menu_item;
     GtkWidget *barre_menu;
     GtkWidget *menu_serveur;
     
     barre_menu=gtk_menu_bar_new();
     
     menu_item=gtk_menu_item_new_with_label ("Serveur");
     gtk_menu_shell_append (GTK_MENU_SHELL(barre_menu), menu_item);
     menu_serveur=gtk_menu_new ();
     gtk_menu_item_set_submenu (GTK_MENU_ITEM(menu_item), menu_serveur);
     menu_item=gtk_image_menu_item_new_with_label ("Connecter");
     gtk_menu_shell_append (GTK_MENU_SHELL(menu_serveur), menu_item);
     
     /*Nous venons de créer avec ces quelques lignes un menu avec comme seule entrée principale **"serveur"** et */
     /*à l'intérieur l'entrée **"Connecter"**. Vous additionnez à cette entrée de menu une fonction CALLBACK qui va */
     /* effectuer la connexion demandée. Une fois fait, il vous suffit d'ajouter la ligne suivante à la fonction CALLBACK:*/
     
     gtk_menu_item_label_set_label(menu_item, "Deconnecter");
    Cette manip. permet de changer le texte d'une entrée d'un menu. Pour être plus précis tu accèdes au texte en faisant ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GTK_LABEL(GTK_BIN(menu_item)->child
    Attention tout de même. Cette méthode ne te garantira pas la longévité de ton code dans les futures versions de GTK+. Elle à tout de même le mérite d'exister

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 176
    Par défaut
    Merci beaucoup !!

    Ainsi, je n'ai plus que 100 lignes de code au lieu de 300

    PS: si j'ai bien compris, on peut généraliser ta méthode et retrouver n'importe quel Widget de l'application grâce à sa hiérarchie dans " l'arbre GTK+ " ?

  4. #4
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 308
    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 308
    Billets dans le blog
    5
    Par défaut
    Pour le P.S. je n'en suis pas sûr . Ca doit être vrai pour les widgets dérivant des GtkBin. Sujet à fouiller donc...

  5. #5
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Citation Envoyé par gerald3d Voir le message
    Pour le P.S. je n'en suis pas sûr . Ca doit être vrai pour les widgets dérivant des GtkBin. Sujet à fouiller donc...
    Oui c'est le seul champs de la classe GtkBin, à noter qu'il est en lecture seul !

    Il est tous de même préférable d'utiliser la fonction gtk_bin_get_child

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 176
    Par défaut
    Merci à vous ça marche j'ai utilisé le code suivant et il fonctionne nickel :

    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
     
    gint zoom(GtkWidget* pMenuItem,gpointer data)
    {
     
    //Recupere le label du menu cliqué
      GtkWidget *pItem;
      pItem = gtk_bin_get_child(GTK_BIN(pMenuItem));
     
      gchar *pText;
    //ligne 167
      pText = gtk_label_get_text(GTK_LABEL(pItem));
    //fin
     
    return 0;
    }
    J'ai juste un petit souci quand je compiles, un warning que je ne comprend pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    fonctions.c: In function "zoom":
    fonctions.c:168: warning: assignment discards qualifiers from pointer target type
    Si jamais vous pouviez m'éclairer sur ce warning afin d'obtenir un programme propre à 100%

  7. #7
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Citation Envoyé par NeMo_O Voir le message
    J'ai juste un petit souci quand je compiles, un warning que je ne comprend pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    fonctions.c: In function "zoom":
    fonctions.c:168: warning: assignment discards qualifiers from pointer target type
    La fonction gtk_label_get_text retourne une chaîne de caractères constante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const gchar *text = gtk_label_get_text (GTK_LABEL (item));

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 176
    Par défaut
    En effet il fallait rajouter le qualificatif const

    Je l'avais rarement vu, ça sert donc pour indiquer qu'on ne modifie pas la "variable", si on peut l'appeler ainsi.

    Merci beaucoup plus de warning comme ça ^^

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

Discussions similaires

  1. [Excel] Récupérer le texte dans un shape de type zonedetext
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 23/12/2005, 11h00
  2. Récupérer du texte d'un fichier xml entre deux balises
    Par manutudescends dans le forum Format d'échange (XML, JSON...)
    Réponses: 24
    Dernier message: 30/11/2005, 18h29
  3. récupérer le texte d'un tooltip grace à son hwnd
    Par ChrisitianS_ dans le forum MFC
    Réponses: 2
    Dernier message: 19/11/2005, 15h23
  4. Récupérer le texte d'un champ de texte
    Par theberliner dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 04/12/2004, 10h08
  5. [methode] récupérer du texte
    Par thesly dans le forum Débuter
    Réponses: 6
    Dernier message: 23/04/2004, 15h14

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