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 :

Accés aux méthodes de la boite dialogue parent


Sujet :

MFC

  1. #1
    Membre du Club Avatar de Soronite
    Profil pro
    Inscrit en
    Août 2005
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 82
    Points : 46
    Points
    46
    Par défaut Accés aux méthodes de la boite dialogue parent
    Bonjour
    Donc voila mon problème :
    Je suis Visual 2005 sur un projet MFC, je crée deux boites de dialogues au quelle je rattache deux classes que l'on appelera "ParentDLG" et "EnfantDLG". Le programme me lance "ParentDLG" et grace par exemple a un bouton je crée la deuxième boite de dialogue "EnfantDLG" et se que je veu faire est trés simple c'est avoir accés a des mèthodes de "ParentDLG" depuis "EnfantDLG". Donc se sujet a deja surement etre mis dans le forum mais je l'ai pas trouvé. Dans La FAQ je comprend pas comment il font et de toute facons Visual me dégage lors de la compilation. En effet dans l'exemple de la FAQ il mette:

    Pour la boite dialogue parent:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    void CMyFormView::OnButtonMachin() // c'est un exemple bien sur ... 
    { 
     CMyDialog Dlg(this)
     
    Dlg.DoModal(); 
    }
    Et pour la boite de dialogue enfant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    BOOL CMyDialog::OnInitDialog() 
    { 
       CDialog::OnInitDialog(); 
       CMyFormView *pView=static_cast< CMyFormView *>(m_pParentWnd);
    }
    et en faite c'est la que je comprend pas il veulent recupérer le pointeur sur la boite de dialogue parent avec un type que la classe enfant ne connais pas ! .

    Donc pour résumer je voudrais que l'on m'explique comment avoir accés aux méthodes que l'on a implémenter d'une boite de dialogue parent depuis une boite de dialogue enfant !
    merci

  2. #2
    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
    Points : 17 323
    Points
    17 323

  3. #3
    Membre du Club Avatar de Soronite
    Profil pro
    Inscrit en
    Août 2005
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 82
    Points : 46
    Points
    46
    Par défaut Comprend tj pas !
    Merci de ta reponse farscape mais je ne comprend toujours pas !

    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
     
    class CDlg1: public CDialog 
    {
    public:
    CDlg1(CWnd* pParent = NULL);// standard constructor
            // Generated message map functions
    //{{AFX_MSG(CDlg1)
    virtual BOOL OnInitDialog();
    afx_msg void OnButton1();
    //}}AFX_MSG
    DECLARE_MESSAGE_MAP()
    };
     
    class CDlg2: public CDialog 
    {
    public:
        CDlg2(CWnd* pParent = NULL);// standard constructor
    // Generated message map functions
    //{{AFX_MSG(CDlg2)
        virtual BOOL OnInitDialog();
        virtual void OnOK();
    //}}AFX_MSG
    DECLARE_MESSAGE_MAP()
    public:
    };
    // appel dlg1
    CDlg1 dlg;
    dlg.DoModal();
     
    void CDlg1::OnButton1() 
    {
        // TODO: Add your control notification handler code here
        CDlg2 dlg(this); // fournit comme parent CDlg1 par exemple 
                                // ou alors affectation à une variable interne.
                                // par un accesseur etc...
        dlg.DoModal(); 
    }
     
    void CDlg2::OnOK() 
    {
        // TODO: Add extra validation here
        CDlg1 *pDlg=( CDlg1 *)GetParent();
        // Maintenant j'ai accès à la boite de dialogue CDlg1.
     
       CDialog::OnOK();
    }
    Deja la je serait curieux de savoir ou sont placés les includes ! et pourquoi si on veut la boite de dialogue Dlg2 à partir de Dlg1, on créé l'objet Dlg1 dans Dlg2

    PS: Mon projet est un projet basé sur les boites dialogues et non MDI, je sais pas si c'est une grande importance mais bon !

  4. #4
    Membre habitué Avatar de Ksempac
    Inscrit en
    Février 2007
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 165
    Points : 185
    Points
    185
    Par défaut
    Les include ne sont pas mis car le programme n'est pas un programme complet (c'est simplement un bout de code pour illustrer une solution)

    Le bout de code reellement interessant est celui 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
     
    void CDlg1::OnButton1() 
    {
        // TODO: Add your control notification handler code here
        CDlg2 dlg(this); // fournit comme parent CDlg1 par exemple 
                                // ou alors affectation à une variable interne.
                                // par un accesseur etc...
        dlg.DoModal(); 
    }
     
    void CDlg2::OnOK() 
    {
        // TODO: Add extra validation here
        CDlg1 *pDlg=( CDlg1 *)GetParent();
        // Maintenant j'ai accès à la boite de dialogue CDlg1.
     
       CDialog::OnOK();
    }
    Lorsqu'on cree Dlg2 on lui passe une reference (un pointeur) vers la fenetre courante afin qu'il connaisse son Parent.

    Ensuite dans Dlg2 on ne cree pas un Dlg1, on appelle simplement la methode de Dlg2 qui renvoie le pointeur vers le parent. Cependant cette methode renvoie un pointeur vers un objet de type CWnd. Donc on ne peut utiliser que les methodes de la classe CWnd. Pour pouvoir utiliser les methodes de la classe CDlg1 il faut le caster en pointeur vers un objet de type CDlg1 : c'est le role du "(CDlg1 *)" dans le code.

    Une fois que t'as ton pointeur qui est bien identifié comme pointeur vers un object de type CDlg1, tu peux appeler tes methodes avec pDlg->nomdelamethode();

    Hum...je sais pas si j'ai ete tres clair

  5. #5
    Membre du Club Avatar de Soronite
    Profil pro
    Inscrit en
    Août 2005
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 82
    Points : 46
    Points
    46
    Par défaut
    Merci de ta reponse Ksempac tous sa je la vais bien compris . Je que je ne comprend pas c'est comment Dlg2 connais le type de l'objet Dlg1. En effet pour les includes sont importants aussi , si on les mettais on verais qu'il y a un problème car pour que la "méthode" (pas une fonction de classe!) que tu me propose et qui est écrit dans la FAQ marche il faudrait appeler Dlg1 dans Dlg2 et Dlg2 dans Dlg1, en gros le principe du serpent qui se mort la queu .
    Problème non résolu !

  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
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    ça ne cause pas de probléme, avec la déclaration des includes et l'utilisation locale d'un pointeur de l'autre classe.
    si on doit declarer un pointeur (uniquement bien sûr) dans la classe on se reportera à ce post de la faq:
    http://c.developpez.com/faq/vc/?page=IDE#PbWithHeaders

  7. #7
    Membre du Club Avatar de Soronite
    Profil pro
    Inscrit en
    Août 2005
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 82
    Points : 46
    Points
    46
    Par défaut
    Merci , j'ai réussi sa marche maintenant

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

Discussions similaires

  1. Accès aux méthodes de la classe parente
    Par gilouu dans le forum Débuter
    Réponses: 3
    Dernier message: 03/04/2013, 22h39
  2. UserControl parent-enfant accès aux méthodes
    Par gridin dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 24/03/2011, 11h17
  3. Problème d'accès aux méthodes d'une classe
    Par RR instinct dans le forum Langage
    Réponses: 5
    Dernier message: 26/06/2006, 14h51
  4. Réponses: 5
    Dernier message: 22/04/2005, 11h38
  5. [TOMCAT] JSP problème d'accès aux méthodes d'une classes
    Par gunnm dans le forum Tomcat et TomEE
    Réponses: 3
    Dernier message: 22/05/2004, 14h02

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