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 :

Acces a MainView a partir de MainFrm


Sujet :

MFC

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Par défaut Acces a MainView a partir de MainFrm
    Bonjour,

    Dans un projet de type application, on a (en general) une MainFrm, une MainDoc et une MainView.

    Est-il possible d'acceder de l'une a l'autre?
    C'est a dire dans ma MainFrm, puis-je faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    CMainView* pView;
    // l'initialiser je sais pas comment
    // Et ensuite appeler une fonction de MainView
    pView->SetParametre("quelquechose");
    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
    Par défaut
    salut
    en SDI : http://c.developpez.com/faq/vc/?page...IGetActiveView
    en MDI:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    static_cast<CFrameWnd *>(AfxGetMainWnd())->GetActiveFrame( )->GetActiveView();

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Par défaut
    Arf, j'y arrive pas!
    Merci pour les liens.

    Dans mon cas c'est une vue de type form:
    Class CMainView : public CFormView

    Je suppose que ca doit etre le meme principe.
    Deja est-ce que c'est possible aussi avec les formview.

    La je suis en train de me battre avec les cast...

  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
    c'est possible pour tous les types de view...
    je ne vois pas le probleme du cast..
    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    CView *pView=static_cast<CFrameWnd *>(AfxGetMainWnd())->GetActiveFrame( )->GetActiveView() ;
    CMainView *pForm=static_cast<CMainView *>(pView);
    ASSERT(pForm->IsKindOf(RUNTIME_CLASS(CMainView)));

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Par défaut
    Ok, deja moi je m'acharnai a essayer de le faire sur la meme ligne.
    Mais j'y arrive quand meme pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    	CView* pView = static_cast<CFrameWnd *>(AfxGetMainWnd())->GetActiveFrame( )->GetActiveView(); // Pas de probleme
     
    	//CMainView* pForm = static_cast<CMainView *>(pView); // Ne compile pas(message d'erreur cast impossible)
     
    	CMainView* pForm = (CMainView*)pView; // Compile bien et s'execute apparement bien
     
    	pForm->SetParametre("salut"); // Ne compile pas
    	// Erreur : error C2027: use of undefined type 'CMainView'
    Je precise que la fonction SetParametre existe et qu'elle marche directement dans la classe.

    Plus important peut-etre:
    Pour pouvoir declarer un objet de type CMainView, dans mon MainFrm.h j'ai ajouter:
    Donc la apparament j'arrive bien a caster mais pas a utiliser les fonctions.

  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
    c'est quoi l'erreur de compilation ?
    une CFormView hérite d'une CView il ne devrait pas y avoir de problème.
    si le static_cast génère une erreur c'est qu'il ne sait pas interpréter la définition de ta classe.
    en gros à mon avis il manque l'include contenant la définition de CMainView dans ce source....

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Par défaut
    Ok apparement ce que tu dis est possible.

    Mais je ne peut pas l'inclure car sinon ca me fait une boucle infini(je crois).

    Si dans mon .h je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #include "MainView.h"
    A la place de
    Il me sort une erreur dans MainView.h:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Code:
    public:
    	CMainDoc* GetDocument() const;
     
    Erreur:
    error C2143: syntax error : missing ';' before '*'
    error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
    du coup je vois pas trop...
    Au fait pour info ceci ne compila pas non plus meme erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ASSERT(pForm->IsKindOf(RUNTIME_CLASS(CMainView)));
    Meme erreur donc surement meme probleme.
    Est-ce que je dois chercher du cote des DYNAMIC_DONWCAST ect... ?

  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
    quand on rajoute l'include de définition de la form il faut aussi mettre les autres includes...
    si dans le .cpp de ma form j'ai :
    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
     
    #include "stdafx.h"
    #define CONVERTERS
     
    #define VC_EXTRALEAN        // Exclude rarely-used stuff from Windows headers
    #include <afxext.h>         // MFC extensions
    #include <Afxpriv.h>
     
    #include "SampleSDI.h"
     
    #include "SampleSDIDoc.h"
    #include "SampleSDIView.h"
    #include "DlgAdvanced.h"
     
    #include "DlgTest.h"
    si par exemple j'ai besoin de la définition de la form dans ma CMainFrame, je devrai rajouter les includes suivants:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #include "SampleSDIDoc.h"
    #include "SampleSDIView.h"
    la définition du .doc et ensuite celle de la view en respectant l'ordre...

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Par défaut
    Voyons farscape, c'est evident ce que tu dis ...
    Tiens? c'est pas ce que j'ai fait .

    Cool merci farscape

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

Discussions similaires

  1. MVC, Acces aux controles HTML à partir du controlleur
    Par Invité dans le forum ASP.NET
    Réponses: 0
    Dernier message: 03/02/2010, 20h42
  2. Réponses: 7
    Dernier message: 04/03/2009, 10h16
  3. Réponses: 2
    Dernier message: 26/02/2008, 18h28
  4. Accés utilisateurs SQL Server à partir d'une application.
    Par abdelghani_k dans le forum Bases de données
    Réponses: 1
    Dernier message: 25/04/2007, 16h44
  5. Réponses: 1
    Dernier message: 29/12/2006, 10h42

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