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...
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.
Trouvez des réponses à vos questions sur les langages, les frameworks et les astuces de codage. Échangez avec d'autres développeurs passionnés pour améliorer vos compétences en programmation et rester au fait des dernières tendances du secteur.