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 :

[MFC] Enchainement de 2 CDialog


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 8
    Par défaut [MFC] Enchainement de 2 CDialog
    Bonjour,


    Je voudrais faire un enchainement de 2 CDialog dans la fonction InitInstance de mon application. Pour cela je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    CPremierDlg dlg1;
    CTSecondDlg dlg2;
    m_pMainWnd = &dlg1;
     
    INT_PTR nRet = -1;
    nRet = dlg1.DoModal();
    switch(nRet)
    {
    ...
    }
    m_pMainWnd = &dlg2;
    nRet = dlg2.DoModal();
    ...
    Hors le problème est que la deuxième CDialog apparaît et disparaît aussitôt. Pourquoi ?
    Merci d'avance de vos réponses.

    Alora


  2. #2
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 294
    Billets dans le blog
    2
    Par défaut
    Bonjour, je pense que ton problème vient du code de ta CTSecondDlg. As-tu essayé de débugguer pas à pas?
    Sinon, pourquoi utilises-tu m_pMainWnd à chaque fois? Cela me parait superflu.

  3. #3
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 8
    Par défaut
    En fait, oui j'ai essayé de debugguer pas à pas et le deuxieme DoModal renvoie -1. Mais lorsque j'enleve le CPremierDlg et que je fais le DoModal sur le CTSecondDlg, le CTSecondDlg s'affiche bien. Alors je pensais qu'en changeant la valeur de m_pMainWnd cela arrangerais les choses mais ce n'est pas le cas (jobtiens le même résultat avec ou sans).

    En pratique, pour enchaîner 2 CDialog dans le InitInstance d'une application comment faut-il s'y prendre? Est ce que quelqu'un pourrait me donner un exemple qui marche ?
    Merci d'avance

    Alora

  4. #4
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 294
    Billets dans le blog
    2
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CDialog1 dlg1;
    CDialog2 dlg2;
    dlg1.DoModal();
    [...];
    dlg2.DoModal();
    [...]
    Tu peux même faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CDialog1 dlg;
    for (int i=0; i<100; i++)
    {
        dlg.DoModal();
    }
    Je ne vois pas d'où viens ton erreur.
    Sinon, quand tu fais F11 sur le 2eme DoModal, ça donne quoi?

  5. #5
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 8
    Par défaut
    En fait dans le RunModalLoop il quitte dès le premier tour de boucle à cet endroit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    // pump message, but quit on WM_QUIT
    if (!AfxGetThread()->PumpMessage())
    {
           AfxPostQuitMessage(0);
           return -1;
    }

    Alora

  6. #6
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    ce que tu peux faire, c'est lancer la deuxieme dialog dans le message WM_DESTROY de la premiere:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    void CtwoDialogDlg::OnDestroy()
    {
        CDialog::OnDestroy();
     
        // TODO : ajoutez ici le code de votre gestionnaire de messages
        CSecondDlg Dlg;
        Dlg.DoModal();
    }

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 27/04/2007, 11h12
  2. [MFC] Communication entre une CDialog et une CFormview
    Par julien.nasser dans le forum MFC
    Réponses: 8
    Dernier message: 06/07/2006, 14h32
  3. [MFC] CTabCtrl dans une CDialog
    Par eyghon dans le forum MFC
    Réponses: 1
    Dernier message: 29/04/2005, 19h31
  4. [MFC][DLL]Afficher une CDialog ?
    Par matazz dans le forum MFC
    Réponses: 13
    Dernier message: 13/04/2005, 13h47
  5. [MFC] CPropertySheet (ou CDialog)
    Par tut dans le forum MFC
    Réponses: 4
    Dernier message: 06/11/2002, 13h09

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