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
    Membre � l'essai
    Inscrit en
    Mars 2003
    Messages
    5
    D�tails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 5
    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
    Par d�faut
    salut, c'est quoi la question tu veux recuperer le pointeur sur la mainframe ? ou la view active ?

  3. #3
    Membre � l'essai
    Inscrit en
    Mars 2003
    Messages
    5
    D�tails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 5
    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
    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
    Membre � l'essai
    Inscrit en
    Mars 2003
    Messages
    5
    D�tails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 5
    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
    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
    Membre � l'essai
    Inscrit en
    Mars 2003
    Messages
    5
    D�tails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 5
    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
    Par d�faut
    petit oubli :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    ((CFrameWnd *)AfxGetMainWnd())->GetActiveView();

  9. #9
    Membre � l'essai
    Inscrit en
    Mars 2003
    Messages
    5
    D�tails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 5
    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 Expert
    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
    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

  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
    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
    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