Problème exécution GTK+ (language C)
Résolu
cap'tain Sheeps
-
cap'tain sheeps -
cap'tain sheeps -
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:
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...
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...
A voir également:
- Problème exécution GTK+ (language C)
- Vistalizator language pack windows 7 - Télécharger - Traduction
- Le service spouleur d'impression local n'est pas en cours d'exécution - Guide
- Windows display language french - Guide
- Erreur d'execution 6 dépassement de capacité ✓ - Forum Excel
- Il permet l’exécution des logiciels applicatifs et gère l’utilisation des ressources matérielles (mémoire, processeur, périphériques). ✓ - Forum Logiciels