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

MFC Discussion :

Ouvrir une boite de dialogue


Sujet :

MFC

  1. #1
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2009
    Messages : 26
    Par défaut Ouvrir une boite de dialogue
    Bonjour,

    Je code en c++ sous visual studio 2008 et je veux tout simplement passer de ma fenetre principale à ma 2ème boite de dialogue en remplacant la 1ere.
    Lorsque j'utilise ShowWindow rien se passe.
    Ma boite de dialogue se nomme IDD_ESSAI_DIALOG2

    Merci d'avance

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Bonjour,
    Je ne suis pas sur de saisir ce que tu veux faire ?
    La passer en premier plan ? (SetWindowPos)
    Lui donner le focus ? (SetFocus)
    La passer active ? (SetActiveWindow)

  3. #3
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2009
    Messages : 26
    Par défaut
    Ce que je voudrais faire c'est que j'ai une fenetre de base ou il y a des boutons et quand je fais suivant je veux ouvrir une nouvelle fenetre et fermer la premiere.

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    MFC ou win32?

  5. #5
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2009
    Messages : 26
    Par défaut
    MFC

  6. #6
    Membre éprouvé
    Avatar de TheGzD
    Homme Profil pro
    Ingénieur/ Docteur en Informatique
    Inscrit en
    Avril 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur/ Docteur en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 327
    Par défaut
    As-tu créé ta 2eme fenêtre en lui donnant comme parent la 1ere ? si c'est le cas remplace ce parent par NULL lors de la construction ou encore mieux par une référence à une fenêtre qui serait le parent commun de tes 2 fenêtres.

  7. #7
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Ton appli, c'est SDI, MDI ou dialog Based?

  8. #8
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2009
    Messages : 26
    Par défaut
    dialog Based ...
    Me 1ere fenetre n'a pas de parent elle est deja NULL

  9. #9
    Membre chevronné Avatar de stephdim
    Profil pro
    Inscrit en
    Août 2007
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 462
    Par défaut
    salut,

    il faut faire ça :

    dans CMonApp::InitInstance() (remplacer CMonApp par classe équivalente de ton projet, dérivée de CWinApp)

    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
     
    CMaBoite1Dlg dlg1;
    switch (dlg1.DoModal())
    {
      case IDC_BTN1:    // bouton 1 appuyé, par exemple
      {
        CMaBoite2Dlg dlg2;
        dlg2.DoModal();
        break;
      }
      case IDC_BTN2:    // bouton 2 appuyé, par exemple
      {
        // faire quelque chose ici
        break;
      }
      case IDOK:    // bouton OK ou touche ENTER
      {
        break;
      }
      case IDCANCEL:    // bouton Annulé ou touche ESC
      {
        break;
      }
      default:    // autre ... -1 = erreur
      {
        break;
      }
    }
    puis dans ta boite de dialogue, lorsque un bouton est cliqué, il faut fermer la boite en cours et renvoyer la bonne valeur en faisant ceci:

    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
     
    BEGIN_MESSAGE_MAP(CMaBoite1Dlg,CDialog)    // déjà défini qque part dans ton source
      ON_BN_CLICKED(IDC_BTN1,OnBtn1Clicked)
      ON_BN_CLICKED(IDC_BTN2,OnBtn2Clicked)
    END_MESSAGE_MAP()
     
    void CMaBoite1Dlg::OnBtn1Clicked()
    {
      EndDialog(IDC_BTN1);    // le paramètre ici est le code retour de DoModal()
    }
     
    void CMaBoite1Dlg::OnBtn2Clicked()
    {
      EndDialog(IDC_BTN2);    // le paramètre ici est le code retour de DoModal()
    }
    et ne pas oublier de déclarer, dans la définition de la classe (donc le fichier .h)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    afx_msg void OnBtn1Clicked();
    afx_msg void OnBtn2Clicked();
    tu peux aussi utiliser le Wizzard, il te générera automatiquement la trame...

    je crois que je n'ai rien oublié ...

    @+

  10. #10
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2009
    Messages : 26
    Par défaut
    Oui, en effet il m'a fallu juste ajouter EndDialog(IDOK); pour fermer la page
    j'essayais de faire la même chose avec DestroyWindow mais ça fonctionnait pas.
    Par contre juste apres je fais ShowWindow(IDD_ESSAI_DIALOG2)
    et ca n'ouvre pas ma boite de dialogue 2.

    Que dois-je faire ??

  11. #11
    Membre chevronné Avatar de stephdim
    Profil pro
    Inscrit en
    Août 2007
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 462
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ShowWindow(IDD_ESSAI_DIALOG2)
    oula pas bien du tout !

    as tu bien lu ce que je t'ai écris ? je t'ai fais tout le boulot là ...
    il y a plus qu'a copier / coller

    ta boite de dialogue est modale
    c'est à dire que la création et la destruction est gérée par la fonction DoModal(). ce n'est pas à toi de le faire. la seule façon de sortir de la boucle, donc quitter la fonction DoModal() est d'utiliser EndDialog(), tout autre façon est de la grosse bidouille ...

    habituellement, on ouvre une nouvelle boite de dialogue, lors d'un clic sur un bouton, en tant qu'enfant de la première ... mais tu insistes pour que la première disparaisse ...

    la façon la plus propre est celle que je t'ai montrée dans le post précédent ...

    je réexplique :

    tu fais DoModal() sur ta première boite de dialogue.
    lorsque l'utilisateur clique sur un bouton, on indique que la boite de dialogue doit s'arrêter (donc destruction) et on en profite pour indiquer un code retour à la fonction DoModal() qui va surtout nous servir à savoir sur quel bouton l'utilisateur a cliqué. ceci est fait par ON_BN_CLICKED() ...

    ensuite, il y a plus qu'à tester le retour de DoModal(), si c'est le bouton "spécial", on déclenche une nouvelle boite de dialogue (idem avec DoModal() ) ...

    et ainsi de suite

    @+

  12. #12
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2009
    Messages : 26
    Par défaut
    Salut,

    Merci a toi stephdim,j'avais du mal a comprendre mais ayait c fait, j'ai compris, et ca marche niquel.

    A plouch.

  13. #13
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,
    Si tu veux enchaîner des boîtes de dialogue tu peux utiliser CPropertySheet en mode wizard.
    C'était, j'ai cru comprendre, ce que stephdim voulait dire :
    Citation Envoyé par stephdim Voir le message
    tu peux aussi utiliser le Wizzard, il te générera automatiquement la trame...

  14. #14
    Membre chevronné Avatar de stephdim
    Profil pro
    Inscrit en
    Août 2007
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 462
    Par défaut
    C'était, j'ai cru comprendre, ce que stephdim voulait dire
    non, je parlais du Wizzard de VS pour créer les handlers de message (ce n'est meme plus un Wizzard depuis VC6)

    mais effectivement, c'est une bonne solution aussi les CPropertyPage

    de toute manière, c'est soit des appels de boite de dialogue en séquence (un CPropertyPage sait très bien le faire), soit des appels en cascade ...

    @+

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

Discussions similaires

  1. [A-03]Ouvrir une boite de dialogue pour selectionner un fichier
    Par Milyshyn76 dans le forum VBA Access
    Réponses: 3
    Dernier message: 16/10/2008, 14h26
  2. ouvrir une boite de dialogue
    Par khcomm dans le forum Interfaces Graphiques
    Réponses: 1
    Dernier message: 11/10/2008, 00h25
  3. [Débutant] Ouvrir une boite de dialogue pour enregistrer un fichier
    Par pompier21 dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 09/10/2008, 10h09
  4. impossible d'ouvrir une boite de dialogue
    Par paolo2002 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 19/02/2008, 15h38
  5. Réponses: 10
    Dernier message: 25/10/2007, 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