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. #21
    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 le code que tu avais mis dans ta méthode MMenu::OnBnClickedOkCalScreen, tu l'as bien mis dans la nouvelle méthode MMenu::OnBnClickedButton2 ?

  2. #22
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 126
    Par défaut
    Oui mais dailleurs regarde si je fais ca :

    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
     
    void MMenu::OnBnClickedButton2()
    {
    	// TODO: Add your control notification handler code here
     
    	CEdit* edit=(CEdit*) GetDlgItem(IDC_EDIT1);
     
    	edit->SetWindowText(_T("test"));
     
    	/*CalScreen *pDlg;
        pDlg = new CalScreen();
        pDlg->Create(CalScreen ::IDD,this);
        pDlg->ShowWindow(SW_SHOW);
     
    	*/
     
     
    }
    ben j'ai strictement rien :/

  3. #23
    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
    Donne-nous le code de tout ton .h et ton .cpp pour ta classe MMenu, parce que là, je ne comprends plus trop...

  4. #24
    Membre confirmé
    Inscrit en
    Novembre 2007
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 66
    Par défaut
    salut,
    pourquoi tu n'ajoute pas dans la classe de la 1° fenetre une variable de type CalScreen. et dans MMenu::OnBnClickedOkCalScreen() tu fais : ma_variable_CalScreen.DoModal(); ?

  5. #25
    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 azamharir Voir le message
    salut,
    pourquoi tu n'ajoute pas dans la classe de la 1° fenetre une variable de type CalScreen. et dans MMenu::OnBnClickedOkCalScreen() tu fais : ma_variable_CalScreen.DoModal(); ?
    Il y a bien une variable de type CalScreen dans la boîte de dialogue MMenu, même si c'est sous forme de pointeur. Que cette boîte de dialogue CalScreen soit ouverte par DoModal ou par un Create suivi d'un ShowWindow, cela ne changera rien au fait que la méthode événementielle qui gère le clic sur le bouton Ok, censée afficher cette deuxième boîte de dialogue, ne s'exécute pas...

  6. #26
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 126
    Par défaut
    Bon je poste mon code au cas ou quelqu'un aurait une idée pour m'aider.

    Dans MMenu.h:
    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
     
    #pragma once
     
     
    // MMenu dialog
     
    class MMenu : public CDialog
    {
    	DECLARE_DYNAMIC(MMenu)
     
    public:
    	MMenu(CWnd* pParent = NULL);   // standard constructor
    	virtual ~MMenu();
     
    // Dialog Data
    	enum { IDD = ID_MAIN_MENU_DIALOG };
     
    protected:
    	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
     
    	DECLARE_MESSAGE_MAP()
    public:
     
    	afx_msg void OnBnClickedButton2();
    	afx_msg void OnEnChangeEdit1();
    	afx_msg void OnBnClickedButton3();
    	afx_msg void OnBnClickedButton4();
    };
    Dans MMenu.cpp:
    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
     
    // MMenu.cpp : implementation file
    //
     
    #include "stdafx.h"
    #include "Graphical_IHM.h"
    #include "MMenu.h"
    #include "CalScreen.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(IDC_BUTTON2, &MMenu::OnBnClickedButton2)
    	ON_EN_CHANGE(IDC_EDIT1, &MMenu::OnEnChangeEdit1)
    	ON_BN_CLICKED(IDC_BUTTON3, &MMenu::OnBnClickedButton3)
    	ON_BN_CLICKED(IDC_BUTTON4, &MMenu::OnBnClickedButton4)
    END_MESSAGE_MAP()
     
     
    // MMenu message handlers
     
     
     
    void MMenu::OnBnClickedButton2()
    {
    	// TODO: Add your control notification handler code here
    		//CEdit* edit=(CEdit*) GetDlgItem(IDC_EDIT1);
     
    	//edit->SetWindowText(_T("test"));
     
    	CalScreen *pDlg;
        pDlg = new CalScreen();
        pDlg->Create(CalScreen ::IDD,this);
        pDlg->ShowWindow(SW_SHOW);
     
    }
     
    void MMenu::OnEnChangeEdit1()
    {
    	// TODO:  If this is a RICHEDIT control, the control will not
    	// send this notification unless you override the CDialog::OnInitDialog()
    	// function and call CRichEditCtrl().SetEventMask()
    	// with the ENM_CHANGE flag ORed into the mask.
     
    	// TODO:  Add your control notification handler code here
    }
     
    void MMenu::OnBnClickedButton3()
    {
    	// TODO: Add your control notification handler code here
    	CalScreen *pDlg;
        pDlg = new CalScreen();
        pDlg->Create(CalScreen ::IDD,this);
        pDlg->ShowWindow(SW_SHOW);
     
    	CEdit* edit=(CEdit*) GetDlgItem(IDC_EDIT1);
     
    	edit->SetWindowText(_T("test"));
     
    }
     
    void MMenu::OnBnClickedButton4()
    {
    	// TODO: Add your control notification handler code here
    	CalScreen *pDlg;
        pDlg = new CalScreen();
        pDlg->Create(CalScreen ::IDD,this);
        pDlg->ShowWindow(SW_SHOW);
     
    	CEdit* edit=(CEdit*) GetDlgItem(IDC_EDIT1);
     
    	edit->SetWindowText(_T("test"));
     
     
    }
    Dans CalScreen.cpp:
    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
    41
     
    // alScreen.cpp : implementation file
    //
     
    #include "stdafx.h"
    #include "Graphical_IHM.h"
    #include "CalScreen.h"
     
     
    // CalScreen dialog
     
    IMPLEMENT_DYNAMIC(CalScreen, CDialog)
     
    //IMPLEMENT_DYNCREATE(CalScreen, CDialog)
    CalScreen::CalScreen(CWnd* pParent /*=NULL*/)
    	: CDialog(CalScreen::IDD, pParent)
    {
     
    }
     
    CalScreen::~CalScreen()
    {
    }
     
    void CalScreen::DoDataExchange(CDataExchange* pDX)
    {
    	CDialog::DoDataExchange(pDX);
    }
     
     
    BEGIN_MESSAGE_MAP(CalScreen, CDialog)
     
    END_MESSAGE_MAP()
     
     
     
    void CalScreen :: PostNcDestroy( )
    {
    CalScreen::PostNcDestroy();
    delete this;
    }
    La je suis entrain de faire une nouveau projet pour tester juste ca.

  7. #27
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 126
    Par défaut
    D'ailleurs dans mon code test je ne comprends pas je fais la même chose mais j'ai une erreur à la compilation...

    Quand je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    test_graphique_dialog1 *pDlg
    pour récupérer le pointeur de la fenêtre j'ai l'es erreurs test_graphique_dialog1 undeclared identifier et syntax error sur test_graphique_dialog1.

  8. #28
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 126
    Par défaut
    Oula en effet c'est déja par ce que j'ai l'impression qu'il ne faut surtout pas mettre de _ dans les noms de classe

    Sinon mes problèmes ne seraient pas du à ma configuration du projet?
    Il s'agit de MFC application :
    Dialog based
    MFC standard
    Use MFC in a static library

    (décocher system menu)

  9. #29
    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,

    d'après le code, il n'y aucune raison pour que le gestionnaire associé à un bouton ne soit pas exécuter ...

    fais un test en mettant juste un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    AfxMessageBox(_T("coucou"));
    mais normalement ça devrait marcher, sauf si les ID ne correspondent pas aux objets de la boite de dialogue ...

    ensuite, je pense que tu devrais plus t'orienter vers une boite de dialogue type modale et pas modeless (ce que tu es en train de faire)

    c'est à dire, que si l'utilisateur clique plusieurs fois sur le bouton, tu auras autant de boite de dialogue ... a moins que tu vois les choses comme ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    CalScreen dlg;
    dlg.DoModal();
    ensuite un bug ici: (/!\ supprimer PostNcDestroy() si tu es en modale)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void CalScreen :: PostNcDestroy( )
    {
    CDialog::PostNcDestroy();  // et pas CalScreen::PostNcDestroy();
    delete this;
    }
    Oula en effet c'est déja par ce que j'ai l'impression qu'il ne faut surtout pas mettre de _ dans les noms de classe
    aucun soucis avec les _ dans les noms de classe

    Sinon mes problèmes ne seraient pas du à ma configuration du projet?
    aucun rapport

    essaye avec le AfxMessageBox() tout seul dans un gestionnaire "bouton cliqué" et regarde ce qui se passe.

    ensuite fais ta boite de dialogue modale

    @+

  10. #30
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 126
    Par défaut
    Je comprends pas. Je n'arrive même pas à avoir une message box coucou :/

    J'ai pourtant recréé un projet et en cliquant sur un bouton OK j'obtient bien une messagebox coucou.

    Est ce que ça peut venir du fait que MMenu soit une fille de Graphical_IHMDlg ? En fait dans MMenu.cpp il n'y a pas de InitDialog ou Onpaint ou OnQueryDragIcon ...

  11. #31
    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
    d'après le code que tu as posté, MMenu dérive de CDialog.

    verifies bien que les ID définis dans l'éditeur de ressource correspondent à ceux que tu utilises dans le code ; sinon je vois pas ou est le soucis ...

  12. #32
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 126
    Par défaut
    Bon j'ai refait un beau projet tout beau et maintenant comme par magie ca marche ...

    Alors avec tes conseils Stephdim j'ai mis ca comme code dans MMenu.cpp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    void CMMenuDlg::OnBnClickedOk()
    {
    	// TODO: Add your control notification handler code here
     
    	CalScreen *pDlg;
        pDlg = new CalScreen();
        pDlg->Create(CalScreen ::IDD,AfxGetMainWnd());
        pDlg->ShowWindow(SW_SHOW);
     
    	CalScreen dlg;
    	dlg.DoModal();
    }
    par contre lorsque je clique sur OK j'ai deux fenêtres de dialogue CalScreen identiques qui s'ouvrent en même temps (une seule est valide).

    Comment faire pour supprimer la première fenêtre MMenu aprés avoir chargée la nouvelle?

    Merci beaucoup pour votre aide

  13. #33
    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
    J'aimerai fermer la première fenêtre de dialogue MMenu quand CalScreen s'ouvre vous avez une idée de comment faire ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    void CMMenuDlg::OnBnClickedOk()
    {
    	CalScreen *pDlg;
    	pDlg = new CalScreen();
    	pDlg->Create(CalScreen ::IDD,AfxGetMainWnd());
    	pDlg->ShowWindow(SW_SHOW);
    	OnOK();
    }

  14. #34
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 126
    Par défaut
    Euhhh ca me ferme toute les fenêtres même la nouvelle avec OnOK() du coup je fais simplement un ShowWindow(SH_HIDE);

  15. #35
    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
    J'aimerai fermer la première fenêtre de dialogue MMenu quand CalScreen s'ouvre vous avez une idée de comment faire ?
    La solution de PetitPapaNoel fonctionne, mais il est préférable de faire comme ça, au niveau de l'instanciation de MMenu:

    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
     
    MMenu dlg;
    switch (dlg.DoModal())
    {
      case ID_BUTTON1:
      {
        // bouton 1 sélectionné
        CalScreen dlg2;
        dlg2.DoModal();
        break;
      }
      case IDOK:
      {
        // bouton OK sélectionné
        break;
      }
      case IDCANCEL:
      {
        // bouton CANCEL sélectionné
        break;
      }
      default:
      {
        // erreur
        break;
      }
    }
    puis dans le gestionnaire OnBnClicked()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void MMenu::OnBnClicked()
    {
      EndDialog(ID_BUTTON1);  // ID_BUTTON1 est la valeur de retour de DoModal()
    }
    @+

  16. #36
    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
    Tout à fait d'accord avec stephdim. C'est encore mieux comme ça.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

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