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 :

Fermer les fenêtres


Sujet :

GTK+ avec C & C++

  1. #1
    Membre confirmé Avatar de YuGiOhJCJ
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2005
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2005
    Messages : 206
    Par défaut Fermer les fenêtres
    Bonjour,
    je commence aujourd'hui le GTK +. C'est vraiement sympa, j'arrive déjà à jouer avec les widgets et les évenements. Mais j'ai un problème similaire à celui-ci:
    http://www.developpez.net/forums/sho...rmer+fen%EAtre

    Mon programme est une fenêtre principale qui contient un bouton.
    Lorsqu'on clic sur le bouton, une seconde fenêtre s'ouvre.
    Cette fenêtre peut se fermer en cliquant sur la croix en haut à droite de la fenêtre.
    Par contre, elle est détruite! Je ne peux donc plus la réouvrir en cliquant de nouveau sur le bouton de la fenêtre principale.

    Voici le code source simple et bien commenté je pense que vous comprendrez le problème:
    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
     
    #include <gtk/gtk.h>
     
    /*display_widget function*/
    void display_widget(GtkWidget *widget, gpointer data){
     
    	/*Display the widget*/
    	gtk_widget_show(data);
    }
     
    /*destroy_widget function*/
    gint destroy_widget(GtkWidget *widget, gpointer data){
     
    	/*Display the widget*/
    	return FALSE;
    }
     
    /*main function*/
    int main(int argc, char *argv[]){
     
    	/*Create the widgets*/
    	GtkWidget *window_video, *box_video, *entry_width, *entry_height, *window_main, *box_main, *button_video, *entry;
     
    	/*Initialize GTK*/
    	gtk_init (&argc, &argv);
     
    	/*Create the window_video*/
    	window_video = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    	gtk_widget_set_size_request(GTK_WIDGET(window_video), 320, 240);
    	gtk_window_set_title(GTK_WINDOW(window_video), "Game Creator - Video");
    	g_signal_connect(G_OBJECT(window_video), "delete_event", G_CALLBACK(destroy_widget), NULL);
     
    	/*Create the box_video*/
    	box_video = gtk_hbox_new(FALSE, 0);
    	gtk_container_add(GTK_CONTAINER(window_video), box_video);
     
    	/*Create the text entry_width*/
    	entry_width = gtk_entry_new();
    	gtk_box_pack_start(GTK_BOX(box_video), entry_width, TRUE, TRUE, 0);
     
    	/*Create the text entry_height*/
    	entry_height = gtk_entry_new();
    	gtk_box_pack_start(GTK_BOX(box_video), entry_height, TRUE, TRUE, 0);
     
    	/*Display the box_video*/
    	gtk_widget_show(box_video);
     
    	/*Create the window*/
    	window_main = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    	gtk_widget_set_size_request(GTK_WIDGET(window_main), 320, 240);
    	gtk_window_set_title(GTK_WINDOW(window_main), "Game Creator - Main");
    	g_signal_connect(G_OBJECT(window_main), "delete_event", G_CALLBACK(gtk_main_quit), NULL);
     
    	/*Create the box_main*/
    	box_main = gtk_hbox_new(FALSE, 0);
    	gtk_container_add(GTK_CONTAINER(window_main), box_main);
     
    	/*Create the button_video*/
    	button_video = gtk_button_new_with_label("Video");
    	g_signal_connect(G_OBJECT(button_video), "clicked", G_CALLBACK(display_widget), G_OBJECT(window_video));
    	gtk_box_pack_start(GTK_BOX(box_main), button_video, TRUE, TRUE, 0);
     
    	/*Display the button_video*/
    	gtk_widget_show(button_video);
     
    	/*Create the entry*/
    	entry = gtk_entry_new();
    	gtk_box_pack_start(GTK_BOX(box_main), entry, TRUE, TRUE, 0);
     
    	/*Display the entry*/
    	gtk_widget_show(entry);
     
    	/*Display the box_main*/
    	gtk_widget_show(box_main);
     
    	/*Display the window*/
    	gtk_widget_show(window_main);
     
    	/*Waiting for events*/
    	gtk_main ();
     
    	return 0;
    }
    Est-ce qu'il n'y aurait pas un moyen moins brutal pour fermer la fenêtre sans la détruire? Ainsi je pourrais la réouvrir à volonté.
    Merci beaucoup.

  2. #2
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Bonjour,

    Citation Envoyé par YuGiOhJCJ
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    /*destroy_widget function*/
    gint destroy_widget(GtkWidget *widget, gpointer data){
     
    	/*Display the widget*/
    	return FALSE;
    }
    Pourquoi retourner un gint ?
    Si tu veux cacher la fenêtre tu peux utiliser la fonction gtk_widget_hide.
    Une manière plus simple est de re-créer la fenêtre à chaque clique sur le boutton.

  3. #3
    Membre confirmé Avatar de YuGiOhJCJ
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2005
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2005
    Messages : 206
    Par défaut gint
    Je retourne un gint dont la valeur est FALSE pour détruire la fenêtre(le seul moyen que j'ai trouvé pour l'instant pour fermer les fenêtres).
    Comme le dit le tutorial de GTK+:
    /* If you return FALSE in the "delete_event" signal handler,
    * GTK will emit the "destroy" signal. Returning TRUE means
    * you don't want the window to be destroyed.
    * This is useful for popping up 'are you sure you want to quit?'
    * type dialogs. */

    Sinon je vais essayer de cacher le widget comme tu me le porpose.
    Si le problème est résolu, je le fait savoir

  4. #4
    Membre confirmé Avatar de YuGiOhJCJ
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2005
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2005
    Messages : 206
    Par défaut
    C'est résolu.
    Il faut vraiement que j'apprenne toutes ces fonctions.
    Celle là, je l'avais zappé de la doc.

  5. #5
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Citation Envoyé par YuGiOhJCJ
    Je retourne un gint dont la valeur est FALSE pour détruire la fenêtre(le seul moyen que j'ai trouvé pour l'instant pour fermer les fenêtres).
    Comme le dit le tutorial de GTK+:
    /* If you return FALSE in the "delete_event" signal handler,
    * GTK will emit the "destroy" signal. Returning TRUE means
    * you don't want the window to be destroyed.
    * This is useful for popping up 'are you sure you want to quit?'
    * type dialogs. */

    Sinon je vais essayer de cacher le widget comme tu me le porpose.
    Si le problème est résolu, je le fait savoir
    Oui mais c'est un gboolean qu'il faut utiliser (même si ça revient au même)
    Par contre dans la doc, le nom du signal c'est delete-event (pareil je sais pas si c'est grave )

    Citation Envoyé par YuGiOhJCJ
    C'est résolu.
    Il faut vraiement que j'apprenne toutes ces fonctions.
    Celle là, je l'avais zappé de la doc.
    C'est vrais que l'on peu chercher longtemps avant de trouver la fonction adaptée à nos besoin (parfois même on la re-crée ), mais on est la pour ça

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

Discussions similaires

  1. [Débutant] Fermer toutes les fenêtres sauf la principale
    Par Taiby dans le forum Interfaces Graphiques
    Réponses: 5
    Dernier message: 19/07/2013, 17h08
  2. Fermer une fenêtre et pas toutes les fenêtres ouvertes
    Par Sinakhine dans le forum Général Java
    Réponses: 4
    Dernier message: 29/10/2012, 13h06
  3. [Toutes versions] Fermer toutes les fenêtres VBA
    Par loufab dans le forum Contribuez
    Réponses: 0
    Dernier message: 23/02/2010, 22h52
  4. Fermer toutes les fenêtres filles ayant pour origine une même session
    Par [DreaMs] dans le forum Général Conception Web
    Réponses: 1
    Dernier message: 10/04/2009, 22h01
  5. [VB .NET] Fermer les fenêtres d'un MDI
    Par razikos18 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 09/10/2006, 15h17

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