Problème exécution GTK+ (language C)

Résolu/Fermé
cap'tain Sheeps - Modifié par cap'tain Sheeps le 22/04/2011 à 09:51
 cap'tain sheeps - 12 mai 2011 à 13:28
Bonjour,

J'ai un problème avec mon code d'interface graphique.
Allez je suis de bonne humeur je vous le montre =) si vous voulez le tester:
#include <stdlib.h> 
#include <gtk/gtk.h> 

//Créé la boîte de dialogue qui va nous demander de sélectionner un fichier pour récupérer son chemin 
void TraitementBouton(GtkWidget* pWidget, gpointer data); 

int main(int argc,char **argv) 
{ 
    //Ouverture de la librairie graphique GTK+ 
    gtk_init(&argc,&argv); 

    //Glossaire des widgets graphiques 
    GtkWidget* FenetrePrincipale = NULL;    //Fenêtre principale 
    GtkWidget* frame = NULL;                //Frame principale(faisant toute la fenêtre 
    GtkWidget* table = NULL;                //Tableau graphique pour placer les éléments 

    GtkWidget* LabelBienvenue = NULL;       //Label de présentation 
        gchar* TexteBienvenue = NULL;       //Texte associé au label de présentation 
    GtkWidget* boxBienvenue = NULL;         //Box contenant l'alignement du label de bienvenue 
    GtkWidget* alignementBienvenue = NULL;  //Alignement du label de bienvenue 

    GtkWidget* LabelFil = NULL;             //Label de renseignement du fichier de connections 
        gchar* TexteFil = NULL;             //Texte associé au label de connections 

    GtkWidget* BoutonFil = NULL;            //Bouton pour sélectionner le fichier de connections 
    GtkWidget* boxFil = NULL;               //Box pour contenir l'alignement du bouton de connections 
    GtkWidget* alignementFil = NULL;        //Alignement du bouton des connections 

    GtkWidget* LabelPrf = NULL;             //Label de renseignement de la description des connecteurs 
        gchar* TextePrf = NULL;             //Texte associé au label de description 

    GtkWidget* BoutonPrf = NULL;            //Bouton pour sélectionner le fichier de description 
    GtkWidget* boxPrf = NULL;               //Box pour contenir l'alignement du bouton de description 
    GtkWidget* alignementPrf = NULL;        //Alignement du bouton de description 

    //****************************************************************************************** 
    // Création de la fenêtre 
    //****************************************************************************************** 
        FenetrePrincipale = gtk_window_new(GTK_WINDOW_TOPLEVEL); 
        g_signal_connect(G_OBJECT(FenetrePrincipale), "delete-event", G_CALLBACK(gtk_main_quit), NULL); 
        //Titre de la fenêtre 
        gtk_window_set_title(GTK_WINDOW(FenetrePrincipale), "Generateur de code Winapass5000"); 
        //Taille de la fenêtre 
        gtk_window_set_default_size(GTK_WINDOW(FenetrePrincipale), 700, 500); 
        //Positionnement de la fenêtre 
        gtk_window_set_position(GTK_WINDOW(FenetrePrincipale),GTK_WIN_POS_CENTER); 

    //****************************************************************************************** 
    // Création de la hiérarchie graphique de la fenêtre 
    //****************************************************************************************** 
        frame = gtk_frame_new (""); 
        table = gtk_table_new(4, 3, TRUE); 
        gtk_container_add (GTK_CONTAINER (frame), table); 

        //*************************************************** 
        //Label de bienvenue 
        //*************************************************** 
            //Formalisation du texte 
            TexteBienvenue = g_locale_to_utf8( "<span size=\"xx-large\"><b>Générateur Winapass5000</b></span>", 
                                              -1, NULL, NULL, NULL); 
            LabelBienvenue = gtk_label_new(TexteBienvenue); 

            //Libération de la mémoire 
            g_free(TexteBienvenue); 

            //Formalisation grâce aux balises pango 
            gtk_label_set_use_markup(GTK_LABEL(LabelBienvenue), TRUE); 

            //Création de la box pour contenir l'alignement du label 
            boxBienvenue = gtk_vbox_new(TRUE, 1); 

            //Création de l'alignement du label 
            alignementBienvenue = gtk_alignment_new(0.5, 0, 0, 0); 

            //Hiérarchie des composants graphiques pour le label de bienvenue 
            gtk_container_add (GTK_CONTAINER(alignementBienvenue), LabelBienvenue); 
            gtk_container_add (GTK_CONTAINER (boxBienvenue), alignementBienvenue); 
            gtk_table_attach_defaults(GTK_TABLE(table), boxBienvenue, 0, 3, 0, 1 ); 

        //*************************************************** 
        //Label de renseignement du fichier de connections 
        //*************************************************** 
            //Formalisation du texte 
            TexteFil = g_locale_to_utf8( "Veuillez renseigner le fichier de connections (fichier.FIL) :", 
                                        -1, NULL, NULL, NULL); 

            //Création du label 
            LabelFil = gtk_label_new(TexteFil); 

            //Libération de la mémoire 
            g_free(TexteFil); 

            //Placement du label dans le tableau 
            gtk_table_attach_defaults(GTK_TABLE(table), LabelFil, 0, 2, 1, 2); 

        //*************************************************** 
        //Bouton de renseignement du fichier de connections 
        //*************************************************** 
            //Création du bouton 
            BoutonFil = gtk_button_new_with_mnemonic("Parcourir"); 

            //Création de la box pour contenir l'alignement du bouton 
            boxFil = gtk_vbox_new(TRUE, 1); 

            //Création de l'alignement du bouton 
            alignementFil = gtk_alignment_new(0, 0.5, 0, 0); 

            //Hiérarchie des composants graphiques 
            gtk_container_add (GTK_CONTAINER(alignementFil), BoutonFil); 
            gtk_container_add (GTK_CONTAINER (boxFil), alignementFil); 
            gtk_table_attach_defaults(GTK_TABLE(table), boxFil, 2, 3, 1, 2); 

            //Ecoute du bouton 
            g_signal_connect(G_OBJECT(FenetrePrincipale), "destroy", G_CALLBACK(gtk_main_quit), NULL); 
            g_signal_connect(G_OBJECT(BoutonFil), "clicked", G_CALLBACK(TraitementBouton), NULL); 

        //************************************************************ 
        //Label de renseignement du fichier de définition connecteurs 
        //************************************************************ 
            //Formalisation du texte 
            TextePrf = g_locale_to_utf8( "Veuillez renseigner le fichier de définition des connecteurs (fichier.PRF) :", 
                                        -1, NULL, NULL, NULL); 

            //Création du label 
            LabelPrf = gtk_label_new(TextePrf); 

            //Libération de la mémoire 
            g_free(TextePrf); 

            //Placement du label dans le tableau 
            gtk_table_attach_defaults(GTK_TABLE(table), LabelPrf, 0, 2, 2, 3); 

        //************************************************************* 
        //Bouton de renseignement du fichier de définition connecteurs 
        //************************************************************* 
            //Création du bouton 
            BoutonPrf = gtk_button_new_with_mnemonic("Parcourir"); 

            //Création de la box pour contenir l'alignement du bouton 
            boxPrf = gtk_vbox_new(TRUE, 1); 

            //Création de l'alignement du bouton 
            alignementPrf = gtk_alignment_new(0, 0.5, 0, 0); 

            //Hiérarchie des composants graphiques 
            gtk_container_add (GTK_CONTAINER(alignementPrf), BoutonPrf); 
            gtk_container_add (GTK_CONTAINER (boxPrf), alignementPrf); 
            gtk_table_attach_defaults(GTK_TABLE(table), boxPrf, 2, 3, 2, 3); 

            //Ecoute du bouton 
            g_signal_connect(G_OBJECT(FenetrePrincipale), "destroy", G_CALLBACK(gtk_main_quit), NULL); 
            g_signal_connect(G_OBJECT(BoutonPrf), "clicked", G_CALLBACK(TraitementBouton), NULL); 

        //*************************************************** 
        //Ajout des composants dans la fenêtre et affichage 
        //*************************************************** 
            gtk_container_add(GTK_CONTAINER(FenetrePrincipale),frame); 
            gtk_widget_show_all(FenetrePrincipale); 

    gtk_main(); 

    return EXIT_SUCCESS; 
} 

//là faudrait faire un tableau de char pour récupérer le nom des fichiers 
void TraitementBouton(GtkWidget* pWidget, gpointer donnee) 
{ 
    //Glossaire des widgets graphiques de TraitementBouton 
        GtkWidget* FenetreSelection; 
        GtkWidget* FenTestChemin; 
        GtkWidget* FenetreParent; 
        gchar* cheminFichier; 

    FenetreParent = GTK_WIDGET(donnee); 

    //Creation de la fenetre de selection 
    FenetreSelection = gtk_file_chooser_dialog_new("Ouvrir...", GTK_WINDOW(FenetreParent), GTK_FILE_CHOOSER_ACTION_OPEN, 
                                                    GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, 
                                                    GTK_RESPONSE_OK, NULL); 

    //On limite les actions a cette fenetre 
    gtk_window_set_modal(GTK_WINDOW(FenetreSelection), TRUE); 

    //Affichage de la fenetre 
    switch(gtk_dialog_run(GTK_DIALOG(FenetreSelection))) 
    { 
        case GTK_RESPONSE_OK: 
            //Recuperation du chemin 
            cheminFichier = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(FenetreSelection)); 
            FenTestChemin = gtk_message_dialog_new(GTK_WINDOW(FenetreSelection), GTK_DIALOG_MODAL, GTK_MESSAGE_INFO, 
                                             GTK_BUTTONS_OK, "Chemin du fichier :\n%s", cheminFichier); 
            gtk_dialog_run(GTK_DIALOG(FenTestChemin)); 
            gtk_widget_destroy(FenTestChemin); 
            g_free(cheminFichier); 
        break; 
        default: 
            //[aucune instruction] 
        break; 
    } 

    gtk_widget_destroy(FenetreSelection); 
} 


Une fois la récupération du chemin faite, la fenetre du chemin se ferme normalement, mais quand ca retourne à l'interface principale, ca plante (windows me demande d'envoyer un rapport d'erreur et tout le blablabla).
La console me renvoie ce mesage:
file_system_win32=01032060 still has handle=01030518 at finalization which is NOT CANCELLED!

Que dois-je comprendre?
Merci de votre aide.
Sheeps

Edit: Wow ! le code est visuellement beaucoup plus joli dans mon IDE...

3 réponses

cap'tain sheeps
12 mai 2011 à 13:28
Problème résolu : en fait l'erruer vennait du runtime qui n'était pas à jour, j'ai donc du le désinstaller, télécharger la nouvelle version et après son installation tout marche à merveille.
1
cap'tain sheeps
29 avril 2011 à 08:07
Up !
S'il vous plait répondez moi pour une fois ....
0
cap'tain sheeps
11 mai 2011 à 08:12
up
0