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èder à la classe View depuis CMainFrame


Sujet :

MFC

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 68
    Par défaut Accèder à la classe View depuis CMainFrame
    Bonjour,

    La question peut paraitre triviale, mais elle ne l'est plus avec Visual c++ 2010 !
    Dans une appli document/view MFC, je souhaite appeler une fonction de ma classe vue depuis CMainFrame. J'ai donc demandé un pointeur avec GetActiveView() et je fais un cast vers ma classe CMyView, ce qui m'oblige à inclure le "myview.h" dans mainfrm.cpp. Banal.
    Mais voilà, à la compilation j'ai des erreurs, la classe Document n'est plus reconnue. L'inclusion du fichier d'en tete de la vue est clairement responsable de cette panique, ce que j'ai pu constater via différents essais.
    Comment dois je donc faire, et pourquoi ???

    Arghh, Help please !!!

    Olivier

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    je ne vois pas en quoi la manipulation serait plus difficile sous VS2010.
    Je pense qu'il y a un souci dans tes includes, et que l'emploi de forward declaration serait la solution.

    Mais tout ceci n'est que supposition sans la moindre ligne du code du problème rencontré..
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 68
    Par défaut
    Merci Bousk pour ta réponse,

    Pas besoin d'inclure mon code, il suffit de générer une appli MFC document/view de base avec le wizard, en acceptant tout par defaut et d'inclure un #include "myview.h" dans MainFrm.cpp

    (avec myview = le fichier correpondant à la classe view du projet)

    --> Plein d'erreur de compilation !

    Rien à voir avec mon propre code...

    Pour le forward declaration, je ne connais pas, je vais chercher sur le web

    Olivier

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 464
    Par défaut
    Comme Bousk, je ne vois pas en quoi la manipulation serait plus difficile sous VS2010.

    Pour moi, il est très très suspect que la MainFrm d'une application MDI ait besoin du type concret d'une des vues.

    J'ai donc fait la manipulation sur un projet MFC/MDI. Effectivement cela ne compile pas mais il suffit d'ajouter l'include du fichier du type du Document pour que tout revienne en ordre.

    Si vous trouvez cela pas propre, je vous dirais que le problème est d'avoir besoin du type concret d'une vue dans MainFrm.

    P.S.: je viens de tester sur une application SDI, et c'est pareil.

  5. #5
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 526
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 526
    Par défaut
    Salut sujet maintes fois abordé : il faut dans la classe CMainFrame obtenir un pointeur sur la classe CDoc active avec CFrameWnd::GetActiveDocument
    Puis appeler CDocument::GetNextView

    http://msdn.microsoft.com/fr-fr/libr...(v=vs.80).aspx
    Pour appeler la méthode de la CView au besoin faire un cast

    // This example uses CDocument::GetFirstViewPosition
    // and GetNextView to repaint each view.
    void CMyDoc::OnRepaintAllViews()
    {
    POSITION pos = GetFirstViewPosition();
    while (pos != NULL)
    {
    CView* pView = GetNextView(pos);
    pView->UpdateWindow();
    }
    }

    // An easier way to accomplish the same result is to call
    // UpdateAllViews(NULL);

Discussions similaires

  1. Accéder à une classe spécifique depuis main
    Par chimouch dans le forum Débuter avec Java
    Réponses: 7
    Dernier message: 23/03/2011, 11h31
  2. Accèder à une classe fille depuis la classe mère
    Par Phreak0x dans le forum Windows Forms
    Réponses: 3
    Dernier message: 28/10/2008, 10h14
  3. Accéder a une splitter view depuis un thread
    Par benoit70 dans le forum MFC
    Réponses: 13
    Dernier message: 11/04/2008, 11h38
  4. Réponses: 4
    Dernier message: 28/11/2007, 16h38
  5. Réponses: 5
    Dernier message: 11/09/2007, 11h32

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