1. #1
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    juin 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : juin 2016
    Messages : 10
    Points : 4
    Points
    4

    Par défaut changement de police de caracteres avec un "char" avec gtk

    Bonjour
    je suis debutant en c et pour realiser un petit programme perso , j ai decouvert gtk ,mais je rencontre de nombreux problemes que je vous soumet au fur et a mesure que je bloque dessus
    aujourd hui ,j ai decidé de modifier l aspect des textes presents dans mon programme;pour ce faire j ai donc compris que pour faire cela ,il fallait passer en utf 8 et ensuite mettre des balises pour ,par exemple ,changer la couleur,la police ,mettre en gras;je me suis donc inspiré du programme suivant ,trouvé sur un site
    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
    30
    31
    32
    33
    #include <stdlib.h>
    #include <gtk/gtk.h>
     
    int main(int argc,char **argv)
    {
        GtkWidget* Fenetre = NULL;
        GtkWidget* Label = NULL;
        gchar* TexteConverti = NULL;
     
        gtk_init(&argc, &argv);
     
        Fenetre = gtk_window_new(GTK_WINDOW_TOPLEVEL);  // Définition de la fenêtre
        gtk_window_set_title(GTK_WINDOW(Fenetre), "Le texte avec les labels"); // Titre de la fenêtre
        gtk_window_set_default_size(GTK_WINDOW(Fenetre), 300, 100); // Taille de la fenêtre
     
        TexteConverti = g_locale_to_utf8("<span face=\"Verdana\" foreground=\"#73b5ff\" size=\"xx-large\"><b> coucou</b></span>\n", -1, NULL, NULL, NULL);  //Convertion du texte avec les balises
        Label=gtk_label_new(TexteConverti); // Application de la convertion à notre label
        g_free(TexteConverti); // Libération de la mémoire
     
        gtk_label_set_use_markup(GTK_LABEL(Label), TRUE); // On dit que l'on utilise les balises pango
     
        gtk_label_set_justify(GTK_LABEL(Label), GTK_JUSTIFY_CENTER); // On centre notre texte
     
        gtk_container_add(GTK_CONTAINER(Fenetre), Label);  // On ajoute le label a l'interieur de 'Fenetre'
     
        gtk_widget_show_all(Fenetre); // On affiche 'Fenetre' et tout ce qu'il contient
     
        g_signal_connect(G_OBJECT(Fenetre), "delete-event", G_CALLBACK(gtk_main_quit), NULL); // Je ne commente pas cette fonction, vous la verrez dans le chapitre suivant.
     
        gtk_main();
     
        return EXIT_SUCCESS;
    }
    cela va tres bien;mais moi ,je veux que le texte soit issu d un tableau de char , et que ce soit la chaine entrée dans ce tableau qui soit inscrite dans ma fenetre ;donc ,pour essayer , j ai modifié le programme si dessus en ceci
    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
    30
    31
    32
    33
    34
    #include <stdlib.h>
    #include <gtk/gtk.h>
     
    int main(int argc,char **argv)
    {
        GtkWidget* Fenetre = NULL;
        GtkWidget* Label = NULL;
        gchar* TexteConverti = NULL;
        char bof[]="c est pas bon";// le char avec le texte a afficher
     
        gtk_init(&argc, &argv);
     
        Fenetre = gtk_window_new(GTK_WINDOW_TOPLEVEL);  // Définition de la fenêtre
        gtk_window_set_title(GTK_WINDOW(Fenetre), "Le texte avec les labels"); // Titre de la fenêtre
        gtk_window_set_default_size(GTK_WINDOW(Fenetre), 300, 100); // Taille de la fenêtre
     
        TexteConverti = g_locale_to_utf8("<span face=\"Verdana\" foreground=\"#73b5ff\" size=\"xx-large\"><b> bof</b></span>\n", -1, NULL, NULL, NULL);  //ici ,coucou est remplacé par bof
        Label=gtk_label_new(TexteConverti); // Application de la convertion à notre label
        g_free(TexteConverti); // Libération de la mémoire
     
        gtk_label_set_use_markup(GTK_LABEL(Label), TRUE); // On dit que l'on utilise les balises pango
     
        gtk_label_set_justify(GTK_LABEL(Label), GTK_JUSTIFY_CENTER); // On centre notre texte
     
        gtk_container_add(GTK_CONTAINER(Fenetre), Label);  // On ajoute le label a l'interieur de 'Fenetre'
     
        gtk_widget_show_all(Fenetre); // On affiche 'Fenetre' et tout ce qu'il contient
     
        g_signal_connect(G_OBJECT(Fenetre), "delete-event", G_CALLBACK(gtk_main_quit), NULL); // Je ne commente pas cette fonction, vous la verrez dans le chapitre suivant.
     
        gtk_main();
     
        return EXIT_SUCCESS;
    }
    je n est trouvé nul part comment il fallait faire pour que mon char "bof" soit pris en compte comme tel dans la ligne de conversion;j ai essayé au pif , les crochets et autres petits trucs comme cela ,mais rien n y fait ;alors si vous avez une idée,merci de votre aide

  2. #2
    Membre du Club Avatar de Persistant
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    septembre 2016
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : septembre 2016
    Messages : 40
    Points : 55
    Points
    55

    Par défaut

    Bonjour,

    En m'inspirant de la documentation officiel de Gtk :

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    char str[]="c'est pas mal";// le char avec le texte a afficher
    const char *format = "<span style=\"italic\">\%s</span>";
    char *markup_TexteConverti;
    GtkWidget *label;
     
    markup_TexteConverti = g_markup_printf_escaped (format, str);
    label=gtk_label_new(NULL);
    #if 0
    gtk_label_set_use_markup (GTK_LABEL (label), TRUE);// GtkLabel doit interpréter le texte de la propriété "label" comment étant un format de balisage
    gtk_label_set_label (GTK_LABEL (label), markup_TexteConverti);
    #else
    gtk_label_set_markup (GTK_LABEL (label), markup_TexteConverti);
    #endif
    g_free (markup_TexteConverti);

    En ésperant que ce petit bout de code peut t'aider...

  3. #3
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    juin 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : juin 2016
    Messages : 10
    Points : 4
    Points
    4

    Par défaut

    merci de ton aide ,persistant,mais j ai essayé ton code dans mon programme , et cela ne donne rien;j avoue que je ne maitrise pas ce que tu as fait , et du coup ,en l integrant , j ai surement fait des gaffes;donc voila mon code avec ta modif
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    #include <stdlib.h>
    #include <gtk/gtk.h>
     
     
     
    int main(int argc,char **argv)
    {
        GtkWidget* Fenetre = NULL;
        GtkWidget* Label = NULL;
        gchar* TexteConverti = NULL;
        char bof[]="c est pas bon";// le char avec le texte a afficher
     
        gtk_init(&argc, &argv);
     
        Fenetre = gtk_window_new(GTK_WINDOW_TOPLEVEL);  // Définition de la fenêtre
        gtk_window_set_title(GTK_WINDOW(Fenetre), "Le texte avec les labels"); // Titre de la fenêtre
        gtk_window_set_default_size(GTK_WINDOW(Fenetre), 300, 100); // Taille de la fenêtre
     
        char str[]="c'est pas mal";// le char avec le texte a afficher
    const char *format = "<span style=\"italic\">\%s</span>";
    char *markup_TexteConverti;
    GtkWidget *label;
     
    markup_TexteConverti = g_markup_printf_escaped (format, str);
    label=gtk_label_new(NULL);
    #if 0
    gtk_label_set_use_markup (GTK_LABEL (label), TRUE);// GtkLabel doit interpréter le texte de la propriété "label" comment étant un format de balisage
    gtk_label_set_label (GTK_LABEL (label), markup_TexteConverti);
    #else
    gtk_label_set_markup (GTK_LABEL (label), markup_TexteConverti);
    #endif
    g_free (markup_TexteConverti);
     // Libération de la mémoire
     
        gtk_label_set_use_markup(GTK_LABEL(Label), TRUE); // On dit que l'on utilise les balises pango
     
        gtk_label_set_justify(GTK_LABEL(Label), GTK_JUSTIFY_CENTER); // On centre notre texte
     
        gtk_container_add(GTK_CONTAINER(Fenetre), Label);  // On ajoute le label a l'interieur de 'Fenetre'
     
        gtk_widget_show_all(Fenetre); // On affiche 'Fenetre' et tout ce qu'il contient
     
        g_signal_connect(G_OBJECT(Fenetre), "delete-event", G_CALLBACK(gtk_main_quit), NULL); // Je ne commente pas cette fonction, vous la verrez dans le chapitre suivant.
     
        gtk_main();
     
        return EXIT_SUCCESS;
    }

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    juin 2009
    Messages
    1 216
    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 216
    Points : 1 801
    Points
    1 801

    Par défaut

    vulcain1972,

    je suis parti de ton exemple initial. Si tu débutes en C et en GTK, je te conseille de déjà lire quelques tutoriels de C, sinon tu vas galérer.

    Donc le problème initial n'a pas grand chose à voir avec GTK. C'est "comment créer une chaine de caractères avec des morceaux variables ?". A la manière de printf en somme:

    plutôt que:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    printf("Il y a 3 pommes");
    printf("Il y a 4 pommes");
    cela te permet d'écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int i = 3;
    printf("Il y a %d pommes", i);
    i = 4;
    printf("Il y a %d pommes", i);
    Ça c'est pour remplacer un entier. Pour une chaîne de caractères on utilise %s.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    const char * personne = "monsieur";
    printf("bonjour %s", personne);
    /* affichera "bonjour monsieur" */
    pour une chaine que tu veux garder de côté sans la passer à printf, il y a sprintf (ou, plus sécurisé, snprintf). Cela te permettra de modifier un tableau de caractères, mais tu dois gérer toi même que tu as assez de place dans le tableau à remplir, ce qui n'est pas très pratique. Ici gtk (la glib en fait) te fournit g_strdup_printf(), bien plus simple. Tu utilises la même syntaxe que printf, et il te renvoie une chaine allouée dynamiquement et remplie avec les paramètre fournis.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    const char * personne = "monsieur";
    char *texte = g_strdup_printf("bonjour %s", personne);
    printf("%s", texte);
    /* affichera "bonjour monsieur" */
    g_free(texte); /* libère la mémoire allouée par g_strdup_printf */
    Voilà donc ton exemple corrigé:

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    #include <stdlib.h>
    #include <gtk/gtk.h>
     
    int main(int argc,char **argv)
    {
        GtkWidget* Fenetre = NULL;
        GtkWidget* Label = NULL;
        gchar* TexteConverti = NULL;
        char bof[]="c est pas bon";// le char avec le texte a afficher
        const char *format = "<span face=\"Verdana\" foreground=\"#73b5ff\" size=\"xx-large\"><b>%s</b></span>\n";
     
        gtk_init(&argc, &argv);
     
        Fenetre = gtk_window_new(GTK_WINDOW_TOPLEVEL);  // Définition de la fenêtre
        gtk_window_set_title(GTK_WINDOW(Fenetre), "Le texte avec les labels"); // Titre de la fenêtre
        gtk_window_set_default_size(GTK_WINDOW(Fenetre), 300, 100); // Taille de la fenêtre
     
        char *texte = g_strdup_printf(format, bof);
        TexteConverti = g_locale_to_utf8(texte, -1, NULL, NULL, NULL);  //ici ,coucou est remplacé par bof
        g_free(texte); // on libère la mémoire allouée par g_strdup_printf
        Label=gtk_label_new(TexteConverti); // Application de la convertion à notre label
        g_free(TexteConverti); // Libération de la mémoire
     
        gtk_label_set_use_markup(GTK_LABEL(Label), TRUE); // On dit que l'on utilise les balises pango
     
        gtk_label_set_justify(GTK_LABEL(Label), GTK_JUSTIFY_CENTER); // On centre notre texte
     
        gtk_container_add(GTK_CONTAINER(Fenetre), Label);  // On ajoute le label a l'interieur de 'Fenetre'
     
        gtk_widget_show_all(Fenetre); // On affiche 'Fenetre' et tout ce qu'il contient
     
        g_signal_connect(G_OBJECT(Fenetre), "delete-event", G_CALLBACK(gtk_main_quit), NULL); // Je ne commente pas cette fonction, vous la verrez dans le chapitre suivant.
     
        gtk_main();
     
        return EXIT_SUCCESS;
    }

  5. #5
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    juin 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : juin 2016
    Messages : 10
    Points : 4
    Points
    4

    Par défaut

    merci de vos reponses;effectivement ,ta solution ,libreforce,repond a ma question ;par contre , si j essaye de modifier le label dans un bouton gtk ,cela ne donne rien ; d ailleurs avant de le modifier , j ai deja un affichage tout pourri;voila mon code
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    #include <stdlib.h>
    #include <gtk/gtk.h>
     
    int main(int argc, char **argv)
    {
        GtkWidget *pWindow;
        GtkWidget *pTable;
        GtkWidget *pButton[1];
         GtkWidget* pLabel;
     
    char bof[]="888";// le char avec le texte a afficher
     
        gtk_init(&argc, &argv);
     
        pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
        gtk_window_set_default_size(GTK_WINDOW(pWindow), 320, 200);
        gtk_window_set_title(GTK_WINDOW(pWindow), "Les GtkTable");
        g_signal_connect(G_OBJECT(pWindow), "destroy", G_CALLBACK(gtk_main_quit), NULL);
     
        /* Creation et insertion de la table 3 lignes 2 colonnes */
        pTable=gtk_table_new(3,2,TRUE);
        gtk_container_add(GTK_CONTAINER(pWindow), GTK_WIDGET(pTable));
     
     
     
     
     
     
        /* Creation des boutons */
        pButton[0] = gtk_button_new_with_label(bof);// comment faire pour que cela affiche 888 en gras et plus gros
     
     
     
     
        /* Insertion des boutons */
        gtk_table_attach(GTK_TABLE(pTable), pButton[0],
            0, 3, 0, 1,
            GTK_EXPAND | GTK_FILL, GTK_EXPAND,
            0, 0);
     
     
        gtk_widget_show_all(pWindow);
     
        gtk_main();
     
        return EXIT_SUCCESS;
    }
    et voila le resultatNom : 888.jpg
Affichages : 45
Taille : 44,0 Ko
    donc ,deja , j ai le 888 qui est tronqué et je ne sais pas pourquoi , mais pour rester dans l idée du forum ,si je veux changer l aspect du texte dans le bouton ,pour avoir le meme aspect que dans la solution de libreforce, je n y suis pas arrivé;bon faut surement que j y travail plus , mais je galere quand meme pas mal (là aussi ,me direz vous avec raison;ben ouais..);si vous avez des suggestions a me faire sur ce point ,je suis preneur;merci encore a tous

  6. #6
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    juin 2009
    Messages
    1 216
    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 216
    Points : 1 801
    Points
    1 801

    Par défaut

    Changer le label dans le bouton ne peut pas se faire directement. Un bouton est un conteneur qui en plus du label peut contenir une image. Donc le principe, c'est d'aller extraire du bouton un pointeur vers le widget enfant (notre label), et ensuite indiquer à ce label que le texte qu'il contient a de la mise en forme (markup)

    J'ai modifié la ligne 11 pour mettre du texte normal (777) et en gras (888), et j'ai ajouté les lignes 27 et 28:
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    #include <stdlib.h>
    #include <gtk/gtk.h>
     
    int main(int argc, char **argv)
    {
        GtkWidget *pWindow;
        GtkWidget *pTable;
        GtkWidget *pButton[1];
         GtkWidget* pLabel;
     
    char bof[]="777 <b>888</b>";// le char avec le texte a afficher
     
        gtk_init(&argc, &argv);
     
        pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
        gtk_window_set_default_size(GTK_WINDOW(pWindow), 320, 200);
        gtk_window_set_title(GTK_WINDOW(pWindow), "Les GtkTable");
        g_signal_connect(G_OBJECT(pWindow), "destroy", G_CALLBACK(gtk_main_quit), NULL);
     
        /* Creation et insertion de la table 3 lignes 2 colonnes */
        pTable=gtk_table_new(3,2,TRUE);
        gtk_container_add(GTK_CONTAINER(pWindow), GTK_WIDGET(pTable));
     
     
        /* Creation des boutons */
        pButton[0] = gtk_button_new_with_label(bof);// comment faire pour que cela affiche 888 en gras et plus gros
        pLabel = gtk_bin_get_child(GTK_BIN(pButton[0]));
        gtk_label_set_use_markup(GTK_LABEL(pLabel), TRUE);
     
        /* Insertion des boutons */
        gtk_table_attach(GTK_TABLE(pTable), pButton[0],
            0, 3, 0, 1,
            GTK_EXPAND | GTK_FILL, GTK_EXPAND,
            0, 0);
     
     
        gtk_widget_show_all(pWindow);
     
        gtk_main();
     
        return EXIT_SUCCESS;
    }

  7. #7
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    juin 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : juin 2016
    Messages : 10
    Points : 4
    Points
    4

    Par défaut

    merci a toi ,liberforce.une fois de plus tu as parfaitement repondu a ma question;je ne te cache pas que je vais avoir a comprendre le fonctionnement de ta ligne "pLabel = gtk_bin_get_child(GTK_BIN(pButton[0]));", mais au moins je sais que ca marche;je ne ferme pas cette discussion ,car il n est pas impossible que je revienne sur ce sujet la semaine prochaine,si je n ai pas le temps de travailler cela ce week end; mais vraiment ,merci encore une fois

  8. #8
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    juin 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : juin 2016
    Messages : 10
    Points : 4
    Points
    4

    Par défaut

    salut a tous
    donc ce que liberforce a indiqué est parfait;le Gtk_label_set_use_markup () fait ce que je voulais;un petit truc me taraude l esprit,et ça va peut être paraître stupide aux personnes qui ont plus (sans doute même que je devrais dire beaucoup plus,vu mon niveau) l habitude de programmer ,en particulier avec gtk;voila,chaque fois que je suis coincé sur un problème de "programmation gtk" , je cherche dans google des aides ,puis ,ne trouvant rien,je pose la question sur les forum ;après ,on me répond ,et bien souvent , je découvre dans la doc gtk , qu une fonction existait ,comme "Gtk_label_set_use_markup" qui répondait parfaitement a mon problème ;je sais que la doc gtk est en ligne ,et ,même si je ne maîtrise pas bien le sujet, je la consulte ;comme elle a l air gigantesque , comment faites vous pour trouver la fonction gtk qui va répondre a votre problème? j avais ,par exemple tapé dans google "changer le label d un bouton gtk", mais jamais rien ne m a guidé vers la fonction voulue. y a un truc ou bien je ferais mieux de retourner serrer des vis et des écrous ( c est mon boulot, c est pour ça que je dit ça)

  9. #9
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    juin 2009
    Messages
    1 216
    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 216
    Points : 1 801
    Points
    1 801

    Par défaut

    Salut Vulcain,

    je vais essayer de répondre à ta première questions sur le fonctionnement de la ligne "pLabel = gtk_bin_get_child(GTK_BIN(pButton[0]));"

    Pour ton message suivant, je t'invite à le reposter dans un nouveau fil de discussion, pour la simple raison que tu n'est certainement pas le premier à te poser la question, moi même je me suis retrouvé perdu comme toi au début. Je me ferai un plaisir de te répondre dans ce nouveau fil.

    Pour ce qui est de gtk_bin_get_child(GTK_BIN(pButton[0])):

    GTK utilise des conteneurs. Un conteneur est un widget qui peut contenir un ou plusieurs widgets. Tous les widgets qui sont des conteneurs héritent de GtkContainer. Si tu n'es pas familier avec la notion d'héritage, je te conseille de te renseigner sur la programmation orientée objet (POO). Ensuite GtkBin hérite de GtkContainer. GtkBin est un conteneur spécialisé qui ne peut contenir qu'un seul widget. Et GtkButton hérite de GtkBin. Comme un GtkButton est aussi un GtkBin, on peut utiliser les fonctions spécifiques à GtkBin pour récupérer le GtkLabel contenu dans le bouton. Pour la terminologie: si un widget A contient un widget B, on dit que A est le parent de B, et que B est l'enfant de A, d'où le gtk_bin_get_child → récupère le widget enfant. La macro GTK_BIN ne sert qu'à vérifier le type de l'objet avant de le passer à une fonction gtk_bin_*.

  10. #10
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    juin 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : juin 2016
    Messages : 10
    Points : 4
    Points
    4

    Par défaut

    salut a tous
    merci de vos reponses et surtout merci a liberforce pour tout et pour ,en plus , avoir expliqué les choses clairement pour quelqu un de mon niveau ;je ferme cette discussion car toutes les reponses aux problemes posés ont été apportées; j ouvrirais surement d autres discussions ,en particulier sur la recherche de doc ,comme dit par liberforce, mais je vais prendre un peu de temps pour utiliser et perfectionner ma compréhension de ces choses , a mon rythme , bien sur
    encore merci a tous et a toutes

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 20/02/2008, 11h15

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