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 :

Problème sur Structure Incluant un GTK image


Sujet :

GTK+ avec C & C++

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 64
    Points : 31
    Points
    31
    Par défaut Problème sur Structure Incluant un GTK image
    voici le code de mon application, l'exécution ne se lance pas

    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
     
    /*       
    EXEMPLE INTERFACE GRAPHIQUE PDA
    */
     
    /* main.c */
     
     #include <gtk/gtk.h>
     #include <glib/gprintf.h> 
     #include <stdio.h>
     #include <stdlib.h>
     #include <string.h>
     
      struct type_commande
    {
        GtkWidget *fond_image; 
        int num_commande;                             
    };
     
     typedef struct type_commande T_commande;
     
    // ***********************************************************************************************************
    // *************************************** PROGRAMME PRINCIPAL ***********************************************
    // ***********************************************************************************************************
     
     void choix(GtkWidget *B_choix , gpointer data);
     
     int main(int argc, char *argv[]){
     
     /* -------------------------DECLARATION DES VARIABLES------------------------- */ 
     
     T_commande *pictogramme= NULL;   
     
     GtkWidget *window1= NULL,               
               *vbox_fond= NULL, 
               *hbox_b1= NULL,   
               *hbox_b2= NULL,    
               *image2= NULL,   
               *picto=NULL, 
               *B_commande= NULL, 
               *B_choix= NULL;   
     
      gtk_init(&argc, &argv);
     
      /* Création de la fenêtre */
       window1 = gtk_window_new(GTK_WINDOW_TOPLEVEL);
       gtk_window_set_title(GTK_WINDOW(window1), "Application Mac In Touch");
     
      /* Pour quitter proprement le programme lorsqu'on appuie sur la croix */
       gtk_signal_connect_object(GTK_OBJECT(window1), "destroy", (GtkSignalFunc)gtk_exit, NULL);
       gtk_signal_connect_object(GTK_OBJECT(window1), "delete_event", (GtkSignalFunc)gtk_exit, NULL);
     
      /* Redimensionnement de la fenêtre */
       gtk_widget_set_usize(GTK_WIDGET(window1), 350, 450);
     
      /* Positionnemet de la fenêtre au milieu de l'écran */
       gtk_window_set_position(GTK_WINDOW(window1), GTK_WIN_POS_CENTER);
     
      /* Création de la box de fond */                                                            
         vbox_fond = gtk_vbox_new(FALSE, 5);
         gtk_container_add(GTK_CONTAINER(window1), vbox_fond);
     
      /* Création du bouton commande */ 
        B_commande= gtk_button_new(); 
        gtk_box_pack_start(GTK_BOX(vbox_fond),  B_commande, TRUE, TRUE, 0);
        pictogramme->fond_image = gtk_image_new_from_file ("Images/agenda.png"); 
        hbox_b2=gtk_hbox_new(FALSE, 5);    
        gtk_box_pack_start (GTK_BOX (hbox_b2),pictogramme->fond_image, TRUE, TRUE, 0);
        gtk_container_add (GTK_CONTAINER (B_commande), hbox_b2);     
     
      /* Création du bouton de choix */
        B_choix= gtk_button_new(); 
        gtk_box_pack_start(GTK_BOX(vbox_fond),  B_choix, TRUE, TRUE, 0);
        image2 = gtk_image_new_from_file ("Images/Suivant.png"); 
        hbox_b1=gtk_hbox_new(FALSE, 5);    
        gtk_box_pack_start (GTK_BOX (hbox_b1), image2, TRUE, TRUE, 0);
        gtk_container_add (GTK_CONTAINER (B_choix), hbox_b1);  
     
     
       /* Connexion du signal "clicked" sur le bouton commande */
     // g_signal_connect(G_OBJECT(B_), "clicked", G_CALLBACK( ), NULL);
     
       /* Connexion du signal "clicked" sur le bouton choix */
        g_signal_connect(G_OBJECT(B_choix), "clicked", G_CALLBACK(choix),(gpointer*) pictogramme); 
     
       /* Affichage de la fenetre et de tout ce qu'elle contient */
        gtk_widget_show_all(window1);   
        gtk_main();   
        return(0);
    } 
    /***********************DECLARATION DES SOUS PROGRAMMES***********************/ 
     
      void choix(GtkWidget *B_choix , gpointer data){  
      T_commande *Infos;
     
       Infos = (T_commande*) data;
       gtk_image_set_from_file (GTK_IMAGE(Infos->fond_image),"Images/Ampoule-on.png"); 
      }

    je pense que les lignes qui merdent, sont les suivantes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pictogramme->fond_image = gtk_image_new_from_file ("Images/agenda.png");
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gtk_box_pack_start (GTK_BOX (hbox_b2),pictogramme->fond_image, TRUE, TRUE, 0);
    Je pense que c'est un problème de pointeur du à ma structure mais je ne voit pas comment résoudre ça, merci pour votre aide

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Points : 1 633
    Points
    1 633
    Par défaut
    J'ai l'impression que tu fais
    T_commande *pictogramme= NULL;
    suivi de pictogramme->fond_image = ...
    sans jamais alloué de mémoire pour pictogramme, ça va effectivemnet poser pb
    T_commande *pictogramme = g_new0 (T_commande, 1);
    devrait faire l'affaire

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 64
    Points : 31
    Points
    31
    Par défaut
    merci sa marche, bien vu, je ne connaissait pas cette fonction,
    ce qui je trouve étrange c'est que meme en supprimant le =NULL, sa ne s'exécute pas, pourtant j'ai fait d'autre projet en travaillant avec des structures et je n'avais jammais ce type de problème, est ce du au fait que je travaille sur un gtkimage?

    en tou cas merci sa ma débloqué je vais pouvoir avancé

    See ya

  4. #4
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Points : 1 633
    Points
    1 633
    Par défaut
    La tu ne travailles pas sur une structure, tu travailles sur un pointeur sur une structure. A un moment ou à un autre, il faut allouer la mémoire que tu souhaites attribuer à ta structure. C'est ce que fait le g_new0 (qui pourrait tout à fait être remplacé par un malloc)

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 64
    Points : 31
    Points
    31
    Par défaut
    ok, dans la ligne de commande g_new0 (T_commande,1)
    le 1 correspond à la taille ??
    1 octet?

    Merci pour ces précisions

  6. #6
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Points : 1 633
    Points
    1 633
    Par défaut
    Non, ça veut dire qu'il faut allouer 1 objet de type T_commande, ie 1 * sizeof (T_commande) octets

Discussions similaires

  1. [GD] Problème police opentype sur génération de texte en image
    Par Sseubb dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 29/03/2007, 17h03
  2. Problème d'espace sur IE menu vertical avec image de fond
    Par dom dom from the dom dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 09/03/2007, 11h30
  3. Réponses: 5
    Dernier message: 09/09/2006, 23h49
  4. [Structures]Problème sur structures
    Par kendras dans le forum C++
    Réponses: 5
    Dernier message: 07/06/2006, 10h20
  5. Réponses: 9
    Dernier message: 01/06/2006, 08h01

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