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

  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 288
    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 288
    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 288
    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 288
    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();
    }

  7. #7
    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 le probleme venait de m_pMainWnd... Si je ne l'initialise pas du tout ca marche !! Mais, du coup, je ne comprends pas à quoi sert m_pMainWnd.
    En tout cas, merci pour vos réponses.

    Alora

  8. #8
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Par défaut
    il faut jeter un oeil à la doc

    CWinThread::m_pMainWnd

    Remarks
    Use this data member to store a pointer to your thread’s main window object. The Microsoft Foundation Class Library will automatically terminate your thread when the window referred to by m_pMainWnd is closed. If this thread is the primary thread for an application, the application will also be terminated. If this data member is NULL, the main window for the application’s CWinApp object will be used to determine when to terminate the thread. m_pMainWnd is a public variable of type CWnd*.
    Typically, you set this member variable when you override InitInstance. In a worker thread, the value of this data member is inherited from its parent thread.

+ 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