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 :

Aller vers une autre fenêtre de dialogue


Sujet :

MFC

  1. #1
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 126
    Par défaut Aller vers une autre fenêtre de dialogue
    Bonjour à tous !!

    voila je suppose que c'est une question toute bête mais je n'arrive pas à trouver de réponses.

    Je code une application avec plusieurs boites de dialogue. Comment puis je en cliquant sur un bouton aller vers une autre boite de dialogue ?

    En gros dans la fonction suivante comment dois je indiquer le fait d'aller dans une autre boite de dialogue?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void MMenu::OnBnClickedOkCalScreen()
    {
    	// TODO: Add your control notification handler code here
    	OnOK();
    }
    je désire aller en cliquant sur OK vers la boite de dialogue avec l'identifiant suivant :ID_CALIBRATION_SCREEN.

    Merci d'avance!!

  2. #2
    Membre chevronné
    Avatar de PetitPapaNoël
    Développeur informatique
    Inscrit en
    Septembre 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 559
    Par défaut
    Bonjour,

    La nouvelle boîte de dialogue ID_CALIBRATION_SCREEN est elle déjà visible à l'écran, ou faut-il la créer et l'afficher ?

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 126
    Par défaut
    En fait elle existe c'est une boite de dialogue créée. Il faut juste l'ouvrir. je sais qu'en VB ca donnerait un truc du style ID_CALIBRATION_SCREEN.show .. mais la je sais pas comment faire

  4. #4
    Membre chevronné
    Avatar de PetitPapaNoël
    Développeur informatique
    Inscrit en
    Septembre 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 559
    Par défaut
    Si je comprends bien, tu ne disposes pas de pointeur sur l'autre boîte de dialogue. Pour la retrouver, tu peux faire comme c'est expliqué dans la FAQ.
    Une fois que tu auras retrouvé l'instance de cette boîte de dialogue, il faudra la rendre visible. Cf. la FAQ.

  5. #5
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 126
    Par défaut
    euhhh je ne comprends pas trop. En fait j'ai une fenêtre Dialogue MMenu avec le .cpp suivant :

    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
     
    // MMenu.cpp : implementation file
    //
     
    #include "stdafx.h"
    #include "Graphical_IHM.h"
    #include "MMenu.h"
     
     
    // MMenu dialog
     
    IMPLEMENT_DYNAMIC(MMenu, CDialog)
     
    MMenu::MMenu(CWnd* pParent /*=NULL*/)
    	: CDialog(MMenu::IDD, pParent)
    {
     
    }
     
    MMenu::~MMenu()
    {
    }
     
    void MMenu::DoDataExchange(CDataExchange* pDX)
    {
    	CDialog::DoDataExchange(pDX);
    }
     
     
    BEGIN_MESSAGE_MAP(MMenu, CDialog)
    	ON_BN_CLICKED(IDOK, &MMenu::OnBnClickedOkCalScreen)
    END_MESSAGE_MAP()
     
     
    // MMenu message handlers
     
    void MMenu::OnBnClickedOkCalScreen()
    {
    	// TODO: Add your control notification handler code here
    	OnOK();
    et j'aimerai que losrque je clique sur OK cela ferme cette boite de dialogue et ouvre celle avec le .h suivant:

    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
     
    #pragma once
     
     
    // CalScreen dialog
     
    class CalScreen : public CDialog
    {
    	DECLARE_DYNAMIC(CalScreen)
     
    public:
     
    //	DECLARE_DYNCREATE(CalScreen) //pour récupérer la signature
    	CalScreen(CWnd* pParent = NULL);   // standard constructor
    	virtual ~CalScreen();
     
    // Dialog Data
    	enum { IDD = ID_CALIBRATION_SCREEN };
     
    protected:
    	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
     
    	DECLARE_MESSAGE_MAP()
    };
    Je ne vois pas ou insérer la partie d'appel de la dialogue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
        CalScreen *pDlg;
        pDlg = new CalScreen();
        pDlg->Create(CalScreen ::IDD,AfxGetMainWnd());
        pDlg->ShowWindow(SW_SHOW);
    si je l'insère dans le .cpp de MMenu il ne connait pas CalScreen.. et quand j'utilise ShowWindow comment sait-il que c'est CalScreen que je veux ouvrir ?

  6. #6
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 126
    Par défaut
    Si je fais ca aprés avoir récupéré le pointeur sur la fenêtre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    void MMenu::OnBnClickedOkCalScreen()
    {
    	// TODO: Add your control notification handler code here
    	OnOK();
    	CalScreen.ShowWindow(SW_SHOW); // pour afficher SW_HIDE pour Cacher.
    }
    J'ai l'erreur missing ; before . :/

  7. #7
    Membre chevronné
    Avatar de PetitPapaNoël
    Développeur informatique
    Inscrit en
    Septembre 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 559
    Par défaut
    Citation Envoyé par Emyleet Voir le message
    Je ne vois pas ou insérer la partie d'appel de la dialogue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        CalScreen *pDlg;
        pDlg = new CalScreen();
        pDlg->Create(CalScreen ::IDD,AfxGetMainWnd());
        pDlg->ShowWindow(SW_SHOW);
    si je l'insère dans le .cpp de MMenu il ne connait pas CalScreen.. et quand j'utilise ShowWindow comment sait-il que c'est CalScreen que je veux ouvrir ?
    Je croyais que cette boîte de dialogue CalScreen était déjà instanciée. Je pensais juste qu'elle n'était pas visible. A quel endroit as-tu mis ce code là ?

  8. #8
    Membre chevronné
    Avatar de PetitPapaNoël
    Développeur informatique
    Inscrit en
    Septembre 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 559
    Par défaut
    Citation Envoyé par Emyleet Voir le message
    Si je fais ca aprés avoir récupéré le pointeur sur la fenêtre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    void MMenu::OnBnClickedOkCalScreen()
    {
    	// TODO: Add your control notification handler code here
    	OnOK();
    	CalScreen.ShowWindow(SW_SHOW); // pour afficher SW_HIDE pour Cacher.
    }
    J'ai l'erreur missing ; before . :/
    Normal, tu ne peux pas appeler une méthode d'instance comme ShowWindow de cette façon. CalScreen est le nom de ta classe, et non pas une variable d'instance...

  9. #9
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 126
    Par défaut
    du coup je l'ai mis la :

    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
     
    CalScreen::CalScreen(CWnd* pParent /*=NULL*/)
    	: CDialog(CalScreen::IDD, pParent)
    {
    	CalScreen *pDlg;
        pDlg = new CalScreen();
        pDlg->Create(CalScreen ::IDD,AfxGetMainWnd());
        pDlg->ShowWindow(SW_SHOW);
     
    	CWnd* pChild;        
        pChild = AfxGetMainWnd()->GetWindow(GW_HWNDFIRST);
        while (pChild != NULL)
        {
            if(pChild->IsKindOf(RUNTIME_CLASS(CalScreen)))
            {
                TRACE("\nCDialog Find:%x,%x",pChild,pChild->m_hWnd); // la dialogue est trouvée !!!
                break;
            }
            pChild = pChild->GetWindow(GW_HWNDNEXT);
        }
    }
    dans CalScreen.cpp

  10. #10
    Membre chevronné
    Avatar de PetitPapaNoël
    Développeur informatique
    Inscrit en
    Septembre 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 559
    Par défaut
    Citation Envoyé par Emyleet Voir le message
    du coup je l'ai mis la :
    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
     
    CalScreen::CalScreen(CWnd* pParent /*=NULL*/)
    	: CDialog(CalScreen::IDD, pParent)
    {
    	CalScreen *pDlg;
        pDlg = new CalScreen();
        pDlg->Create(CalScreen ::IDD,AfxGetMainWnd());
        pDlg->ShowWindow(SW_SHOW);
     
    	CWnd* pChild;        
        pChild = AfxGetMainWnd()->GetWindow(GW_HWNDFIRST);
        while (pChild != NULL)
        {
            if(pChild->IsKindOf(RUNTIME_CLASS(CalScreen)))
            {
                TRACE("\nCDialog Find:%x,%x",pChild,pChild->m_hWnd); // la dialogue est trouvée !!!
                break;
            }
            pChild = pChild->GetWindow(GW_HWNDNEXT);
        }
    }
    dans CalScreen.cpp
    Ouh la la, non !
    Je ne comprends plus rien à ce que tu veux faire, mais je suis sûr que ce n'est pas du tout une bonne façon de faire.
    Où as-tu créé ta boîte de dialogue CalScreen ? A quel endroit dans le code ?

  11. #11
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 126
    Par défaut
    désolée je débute en C++ je dois surement m'embrouiller et t'embrouiller un peu.

    En fait j'ai fait mes deux fenêtres Main Menu et Calscreen en utilisant les toolbox de Visual C++, je les ai donc fait sans toucher au code.
    Quand je double clique sur les boutons ok des fenêtres, le code est créé respectivement dans MMenu.cpp et Calscreen.cpp.

  12. #12
    Membre chevronné
    Avatar de PetitPapaNoël
    Développeur informatique
    Inscrit en
    Septembre 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 559
    Par défaut
    Ok. En fait, contrairement à ce que je croyais, tu n'as pas encore instancié ta boîte de dialogue CalScreen au moment où tu cliques sur le bouton OK de MMenu. Donc, finalement c'est un cas simple...

    Il faut créer l'instance de CalScreen et l'afficher dans ta méthode événementielle MMenu :: OnBnClickedOkCalScreen.

    Il ne faut pas oublier de gérer la destruction de cette instance de CalScreen en redéfinissant la méthode CalScreen :: PosNcDestroy.

  13. #13
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 126
    Par défaut
    J'ai surement du oublier de faire quelque chose parce que quand je clique sur OK ça me ferme la fenêtre (ce que j'avais déja).

    J'ai fait ca : dans MMenu.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    void MMenu::OnBnClickedOkCalScreen()
    {
    	// TODO: Add your control notification handler code here
    	OnOK();
     
    	CalScreen *pDlg;
        pDlg = new CalScreen();
        pDlg->Create(CalScreen ::IDD,AfxGetMainWnd());
        pDlg->ShowWindow(SW_SHOW);
    }
    et ensuite dans CalScreen.cpp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void CalScreen :: PostNcDestroy( )
    {
    CalScreen::PostNcDestroy();
    delete this;
    }

  14. #14
    Membre chevronné
    Avatar de PetitPapaNoël
    Développeur informatique
    Inscrit en
    Septembre 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 559
    Par défaut
    Si tu ne veux pas que ta première boîte de dialogue se ferme, il ne faut pas appeler la méthode OnOK dans ta méthode MMenu::OnBnClickedOkCalScreen.

  15. #15
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 126
    Par défaut
    ca ne change rien... ca ne doit pas venir de la :/

  16. #16
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 126
    Par défaut
    en fait apparement même si je demande d'afficher un messagebox lorsque je clique sur ok ca me ferme le fenêtre puis plus rien.

  17. #17
    Membre chevronné
    Avatar de PetitPapaNoël
    Développeur informatique
    Inscrit en
    Septembre 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 559
    Par défaut
    Et avant qu'elle ne se ferme, est-ce que ta deuxième boîte de dialogue apparaît ?
    Met un point d'arrêt dans ta méthode MMenu::OnBnClickedOkCalScreen pour voir si elle s'exécute avant que la boîte de dialogue ne se ferme...

  18. #18
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 126
    Par défaut
    non je vois rien .

    En plus ce que je ne comprends pas c'est que lorsque je clique sur un de mes deux autres boutons OK sur mon menu la fenêtre ne se ferme pas mais je ne vois pas non plus la messagebox ...

  19. #19
    Membre chevronné
    Avatar de PetitPapaNoël
    Développeur informatique
    Inscrit en
    Septembre 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 559
    Par défaut
    Ah mais si ta méthode ne s'exécute pas, c'est que tu n'as pas bien associé l'événement du click sur ton bouton avec ta méthode MMenu::OnBnClickedOkCalScreen !

    Je reprends ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    BEGIN_MESSAGE_MAP(MMenu, CDialog)
    	ON_BN_CLICKED(IDOK, &MMenu::OnBnClickedOkCalScreen)
    END_MESSAGE_MAP()
    Ton bouton a-t-il bien pour identifiant IDOK, dans les ressources de ta boîte de dialogue MMenu ?

  20. #20
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 126
    Par défaut
    Oui j'ai vérifié .

    j'ai d'ailleurs changé leur nom en button1 button 2 ... du coup j'ai ca maintenant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ON_BN_CLICKED(IDC_BUTTON2, &MMenu::OnBnClickedButton2)

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Joomla!] Aller vers une autre page
    Par Johngtrs dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 03/03/2013, 18h16
  2. Récupérer valeur Jlist vers une autre fenêtre
    Par chlock62 dans le forum NetBeans
    Réponses: 0
    Dernier message: 21/01/2010, 11h30
  3. Réponses: 28
    Dernier message: 21/04/2008, 12h18
  4. Réponses: 1
    Dernier message: 21/11/2007, 21h53
  5. Réponses: 1
    Dernier message: 08/03/2007, 11h03

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