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+ Discussion :

Ouvrir plusieurs fenêtres dans une application


Sujet :

GTK+

  1. #1
    Candidat au Club
    Inscrit en
    Mars 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 6
    Points : 3
    Points
    3
    Par défaut Ouvrir plusieurs fenêtres dans une application
    Bonjour a tous

    Je souhaiterais ouvrir une fenêtre en plus de ma fenêtre principal. (Fenêtre d'options, avec onglets etc....).

    J'ai une fenetre principal :
    Fonction Main qui ouvre le formulaire principal:
    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
    int main(int argc,char **argv)
    {
     
        // Declaration du formulaire
        cls_FrmPrincipal FrmPrincipal;
     
     
        // Initialisation de GTK
        gtk_init(&argc,&argv);
     
        // Affichage du formulaire
        FrmPrincipal.show();
     
        // Démarrage de la boucle évènementielle
        gtk_main();
     
        return RETOK;
     
    }

    Fonction Show du formulaire principal:
    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
     
    /* ----------------------------------------------------
    			show
      ----------------------------------------------------- */
    void cls_FrmPrincipal::show()
    {
     
        // Creation de la fenetre
        this->pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
     
        [...]
     
        // Connexion du signal "destroy"
        g_signal_connect(G_OBJECT(this->pWindow), "destroy", G_CALLBACK(OnDestroy), NULL);
     
        // Dessine la page
        drawPage(this);
     
        // Affichage de la fenetre
        gtk_widget_show_all(this->pWindow);
     
     
    }

    J'ai un bouton dans mon formulaire qui me permet d'ouvrir mon deuxième formulaire.
    Voici la fonction de callback qui me permet d'ouvrir mon deuxième formulaire:
    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
    void cb_evt_Click_CmdRecDirect(GtkWidget *p_widget, gpointer user_data)
    {
     
        // On recupere le clsParent en parametre (Classe du Formulaire Principal)
        cls_FrmPrincipal *clsParent;
        clsParent = (cls_FrmPrincipal *) user_data;
     
        // Déclaration du Deuxieme formulaire
        cls_FrmRecDirect FrmRecDirect(clsParent);
     
        // Affichage du deuxieme formulaire (Modal)
        FrmRecDirect.show();
     
        // Demarrage de la boucle évènementielle
        gtk_main();
     
    }
    J'ai un bouton dans mon deuxième formulaire qui me permet de le fermer.
    Voici la fonction de callback qui me permet de fermer mon deuxième formulaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void cb_evt_Click_CmdAnnuler(GtkWidget *p_widget, gpointer user_data)
    {
        cls_FrmRecDirect *clsParent;
     
        // On recupere le clsParent en parametre
        clsParent = (cls_FrmRecDirect *) user_data;
     
        gtk_widget_destroy(clsParent->pWindow);
     
        gtk_main_quit();
     
    }

    J'ai un problème de mémoire et je ne sais pas si ca vient de là!

    Voila donc ma question:

    Est-ce la bonne méthode pour ouvrir un deuxième formulaire (en modal, sans bordure, en définissant les mêmes paramètres que la fenêtre principal). Deux boucles gtk_main(); dans un même programme ne pose pas de problèmes?

    Beaucoup d'exemples utilisent des gtk_dialog_new() ou des extensions avec boutons. Mais je ne comprend pas (j'ai regardé vite fait) comment faire des formulaires plus complexe que saisir un nom, de les mettre en modals, de les personnalisés.

    Si quelqu'un pouvait me conseiller, me guider... vers une façon propre de faire!

    Merci à tous

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par okonkole
    Beaucoup d'exemples utilisent des gtk_dialog_new() ou des extensions avec boutons. Mais je ne comprend pas (j'ai regardé vite fait) comment faire des formulaires plus complexe que saisir un nom, de les mettre en modals, de les personnalisés.
    Bin disons que dans la plupart des cas c'est ce qu'il faut faire. Il te suffit de faire pareil que pour ta seconde fenêtre tout en mettant les widgets dans le vbox de la GtkDialog, pour y accéder:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GTK_BOX (GTK_DIALOG (dialog)->vbox)
    Je ne vois pas quel est ton problème pour tout mettre dans un GtkDialog

  3. #3
    Candidat au Club
    Inscrit en
    Mars 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Merci pour ta réponse. J'ai donc cherché dans cette direction, j'ai réussit à ouvrir mon formulaire (et a le fermer).

    Par contre comment fait-tu pour acceder aux boutons (du box des boutons OK Cancel...) d'un "gtk_dialog_new_with_buttons".

    A la manière de code que tu m'a filé?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GTK_BOX (GTK_DIALOG (dialog)->vbox)
    C'est pour changer la taille de la police et la couleur de fond!

    Merci

  4. #4
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par okonkole
    Merci pour ta réponse. J'ai donc cherché dans cette direction, j'ai réussit à ouvrir mon formulaire (et a le fermer).

    Par contre comment fait-tu pour acceder aux boutons (du box des boutons OK Cancel...) d'un "gtk_dialog_new_with_buttons".

    A la manière de code que tu m'a filé?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GTK_BOX (GTK_DIALOG (dialog)->vbox)
    C'est pour changer la taille de la police et la couleur de fond!

    Merci
    Ca je dois dire que je n'y ai pas encore réfléchi, d'ailleurs j'y pensais même pas

  5. #5
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Après une petite recherche dans les sources du widget, il me semble qu'il va te falloir récupérer la liste des widgets enfants du conteneur action_area du GtkDialog soit ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GList * p_list = gtk_container_get_children (GTK_CONTAINER (dialog->action_area));
    Je te promet rien cependant

  6. #6
    Candidat au Club
    Inscrit en
    Mars 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Merci pour la piste je regarde ça dès que j'ai un peu de temps. Je te tiend au courant!

    Oko

  7. #7
    Candidat au Club
    Inscrit en
    Mars 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Merci de ton aide "Franck.H", je suis débloqué (pour le moment). Mais j'ai des problèmes pour la décoration des contrôles... mais ce sera pour un autre post!!!

    Sinon voilà la solution pour pour accéder aux boutons de la dialog box qui se trouvent dans le action_area

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    gpointer ptr;
     
    // On recupère les enfants du conteneur
        GList * p_list = gtk_container_get_children (GTK_CONTAINER (GTK_DIALOG(clsParent->pWindow)->action_area));
     
    // On recupere l'objets [0] du conteneur
        ptr = g_list_nth_data(p_list, 0);
     
    // On fait ce que l'on veut avec ce widget...
        gtk_widget_modify_bg(GTK_WIDGET(ptr), GTK_STATE_NORMAL, &color_Fond);
    a+

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 29/05/2007, 20h37
  2. Plusieurs langages dans une application ?
    Par kayzra dans le forum Langages de programmation
    Réponses: 8
    Dernier message: 27/03/2007, 08h37
  3. [VB6]Accéder à une fenêtre dans une application VB
    Par issaines dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 05/04/2006, 14h58
  4. TForm pour plusieurs fenêtre dans une même fonction ?
    Par MaTHieU_ dans le forum C++Builder
    Réponses: 5
    Dernier message: 15/11/2005, 12h38
  5. Réponses: 8
    Dernier message: 17/03/2004, 14h40

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