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 :

Lien MainFrame / Dialog Box


Sujet :

MFC

  1. #1
    Candidat au Club
    Inscrit en
    Mars 2003
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Lien MainFrame / Dialog Box
    Bonjour,

    J'ai fait une appli "test" sous forme de boite de dialogues (MFC dialog box) qui marche et j'ai voulu ensuite faire la meme appli sous forme de MFC "Multi documents" dans la "MainFrame" toutes les instructions passent mais lorsque j'utilise un lien de la DialogBox vers la MainFrame ca plante...
    Le code qui marche dans la Dialog Based Appli est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // Pointeur sur la classe et les variables
    CTestDlg *pDlg = ( CTestDlg *) GetParent();
    J'ai essayé avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CTestView  *pDlg = ( CTestView  *) AfxGetMainWnd();
    Mais ca donne le meme plantage....

    Comment obtenir un pointeur correct sur la classe et précédente qui n'est pas modale ?

  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
    Par défaut
    salut, c'est quoi la question tu veux recuperer le pointeur sur la mainframe ? ou la view active ?

  3. #3
    Candidat au Club
    Inscrit en
    Mars 2003
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Le pointeur de la mainframe dans le view active

  4. #4
    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
    ta reponse n'est pas tres clair:
    dans une application il y a une MainFrame c'est la fenetre principale de l'application on l'obtient par AfxGetMainWnd().
    qui devrait correspondre dans ton application à la classe CMainFrame (nom par defaut donné par AppWizard).
    maintenant si tu veux la classe parent de la view c'est une CMDIChildWnd. on l'obtient à partir de la view en faisant GetParentFrame().
    CWnd::GetParentFrame
    This method retrieves the parent frame window. The method searches up the parent chain until a CFrameWnd, or a derived class object is found.
    CFrameWnd* GetParentFrame( )
    const;

  5. #5
    Candidat au Club
    Inscrit en
    Mars 2003
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    C'est sur je suis pas très clair... Donc faisons simple :
    1ere étape : J'ai crée un appli modale (MFC dialog Based) avec dans le 1ere boite des variables
    et dans une 2nd boite des fonctions qui agissent sur les variables de la 1ere.
    Pour pouvoir accèder aux variables de la 1ere boite à partir de la 2nd boite j'utilise un pointeur
    sur cette boite comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     CTestDlg *pDlg = ( CTestDlg *) GetParent();
    Ca marche c'est sympa...
    2eme étape : Faire le meme programme mais dans une MFC Multi Documented avec une boite de dialogue
    principale héritée de la classe CFormVIEW (lors du choix à la création). Je rentre mes fonctions dans
    la premiere boite de dialogue ca fonctionne mais lorsque je crée un pointeur sur cette classe pour
    utiliser les variables dans la 2de boite (Dialog box) ca plante à l'éxécution (pas à la compilation):
    J'utilise comme ci dessus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     CTestDlg *pDlg = ( CTestDlg *) GetParent();
    apparement c'est
    éronné. J'ai essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CTestView *pDlg = ( CTestView *) AfxGetMainWnd();
    meme erreur...

    Quel méthode dois je utiliser ?

  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
    tu peux faire GetParent() dans la boite de dialogue que si au moment de la creation de l'objet dialog de la classe CDialog tu lui fournit comme parent la Form:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    CTestDlgDlg dlg(this);
    dlg.DoModal();
    ou this correspond à la CFormView ou on se trouve au moment de l'appel.
    autrement il faut faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CTestView  *pDlg = ( CTestView  *) AfxGetMainWnd()->GetActiveView( );
    deux types de fenetres avec controles dans les MFC :
    les boites de dialogues MoDales classe CDialog
    et les Forms classe CFormView qui n'est pas modale .

  7. #7
    Candidat au Club
    Inscrit en
    Mars 2003
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Je commence à y voir plus clair...
    Dans ma fenetre principale dérivée d'une CFormView je lance une fenetre modale CDialog avec la commande traditionnelle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    CMeasure form(this);
    form.DoModal();
    L'utilisation de "GetParent()" ne marche pas => Debug blabla... et si j'essaie "AfxGetMainWnd()->GetActiveView( ); " => erreur à la compilation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     'GetActiveView' : is not a member of 'CWnd'
    La solution est de créer la 2de fenetre dérivée de CFormView et non de CDialog ?

  8. #8
    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
    petit oubli :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ((CFrameWnd *)AfxGetMainWnd())->GetActiveView();

  9. #9
    Candidat au Club
    Inscrit en
    Mars 2003
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Donc ca doit ressembler à cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CL9View *pDlg = ( CL9View *) ((CFrameWnd *)AfxGetMainWnd())->GetActiveView();
    => "Memory error"

  10. #10
    Membre émérite
    Avatar de la drogue c'est mal
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    2 253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 2 253
    Points : 2 747
    Points
    2 747
    Par défaut
    j'ai toujours pas compris ce que tu voulais recuperer et d'ou tu voulais le recuperer.

    A mon avis tu n'as pas compris le systeme FRAME/DOCUMENT/VIEW
    il y a du linge sur la corde à linge

  11. #11
    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
    re,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ((CMDIFrameWnd *)AfxGetMainWnd())->GetActiveFrame( )->GetActiveView();
    re modification recuperation de la mainFrame .
    puis de la MDI Active .
    et de la view dans la MDI active.

  12. #12
    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
    Citation Envoyé par Alexonthenet
    Je commence à y voir plus clair...
    Dans ma fenetre principale dérivée d'une CFormView je lance une fenetre modale CDialog avec la commande traditionnelle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    CMeasure form(this);
    form.DoModal();
    L'utilisation de "GetParent()" ne marche pas => Debug blabla... et si j'essaie "AfxGetMainWnd()->GetActiveView( ); " => erreur à la compilation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     'GetActiveView' : is not a member of 'CWnd'
    La solution est de créer la 2de fenetre dérivée de CFormView et non de CDialog ?
    si tu pour la dialogue le parent fourni est la CFormView ,GetParent() dans la boite de dialogue est suffisant.

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

Discussions similaires

  1. Pop-up d'une dialog box a partir d'un bouton
    Par bobbyjack dans le forum MFC
    Réponses: 21
    Dernier message: 13/09/2005, 15h32
  2. [MFC] Menu système d'un dialog box
    Par tonyskn dans le forum MFC
    Réponses: 2
    Dernier message: 24/05/2004, 21h50
  3. Insertion dialog box dans feuille SDI
    Par Tom Joad dans le forum MFC
    Réponses: 3
    Dernier message: 12/04/2004, 00h04
  4. comment faire un Dialog Box demi-transparent?
    Par Zorgz dans le forum MFC
    Réponses: 3
    Dernier message: 08/01/2004, 14h02
  5. [Win32]Open/Save Dialog Box
    Par Chance666 dans le forum Windows
    Réponses: 2
    Dernier message: 07/01/2004, 16h47

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