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 :

[MFC_MDI] Créer une 2ième vue associé au même document?


Sujet :

MFC

  1. #1
    Membre émérite Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Par défaut [MFC_MDI] Créer une 2ième vue associé au même document?
    Bonjour,

    Voila, je désirerais créer une nouvelle vue afin d'afficher l'image résultante d'une opération de correction de pixel tout en conservant dans ma première vue l'image défectueuse.

    Connaitrez vous un bout de code permettant cela?

    Merci

    Nicolas

  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

  3. #3
    Membre émérite Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Par défaut
    Voici la méthode que j'ai utilisée pour créer une deuxième vue. Elle est issue d'un TP de mon école.

    AppliApp.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CMultiDocTemplate *pTwoDocTemplate;
    Dans la méthide InitInstance() de AppliApp.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    m_pTwoDocTemplate=new CMultiDocTemplate(IDR_PixcorTYPE,
            RUNTIME_CLASS(CPixcorDoc), // custom MDI child frame
            RUNTIME_CLASS(CChildFrame), 
            RUNTIME_CLASS(CSecondView));
    Dans la classe CMainFrame :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    void CMainFrame::CreateResultView(void)
    {
        CDocTemplate *pDocTemplate = ((CPixcorApp *) AfxGetApp())->m_pTwoDocTemplate;
        CMDIChildWnd *pActiveMDIChild = MDIGetActive();
        CDocument *pDoc = pActiveMDIChild->GetActiveDocument();
        CFrameWnd *pFrameWnd = pDocTemplate->CreateNewFrame(pDoc,pActiveMDIChild);
        pDocTemplate->InitialUpdateFrame(pFrameWnd,pDoc);
    }
    Dans la donction désirée, appeller la fonction suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((CMainFrame *)AfxGetMainWnd())->CreateResultView();
    A partir de la la seconde vue apparait bien et il est possible de dessiner des objets grace à l'instance pDC.
    Par contre, je ne peux avoir accès au document pour appeller mes fonction. Je ne sais pourquoi??
    Dans ma seconde vue j'avais le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CDocument* pDoc = GetDocument();
    // TODO : ajoutez ici le code de dessin
     
    que j'ai remplacé par ceci :
    CPixcorDoc* pDoc = GetDocument();
        ASSERT_VALID(pDoc);
        if (!pDoc)
            return;
        // TODO : ajoutez ici le code de dessin
    Voici les erreurs que j'obtiens :
    c:\temp\Nicolas\Pixor_picture8_deuxvue\SecondView.h(16): error C2501: 'CSecondView::CPixcorDoc' : Spécificateurs de type ou de classe de stockage manquants
    c:\temp\Nicolas\Pixor_picture8_deuxvue\SecondView.h(16): error C2501: 'CSecondView::GetDocument' : Spécificateurs de type ou de classe de stockage manquants
    c:\temp\Nicolas\Pixor_picture8_deuxvue\SecondView.h(16): warning C4183: 'GetDocument' : type de retour manquant ; fonction membre retournant 'int' assumée
    c:\temp\Nicolas\Pixor_picture8_deuxvue\SecondView.cpp(32): error C2440: 'initialisation' : impossible de convertir de 'int *' en 'CPixcorDoc *'
    c:\temp\Nicolas\Pixor_picture8_deuxvue\SecondView.cpp(105): error C2556: 'CPixcorDoc *CSecondView::GetDocument(void) const' : la fonction surchargée ne diffère que par le type de retour de 'int *CSecondView::GetDocument(void) const'
    c:\temp\Nicolas\Pixor_picture8_deuxvue\SecondView.cpp(105): error C2371: 'CSecondView::GetDocument' : redéfinition ; types de base différents
    c:\temp\nicolas\pixor_picture8_deuxvue\pixcordoc.cpp(68): warning C4715: 'CPixcorDoc::OnNewDocument' : les chemins de contrôle ne retournent pas tous une valeur
    En fait cela vient du GetDocument qui crée des soucis à mon avis mais je n'arrive à y remédier. Si vous pouvez m'aider...

    Merci Nicolas

    [Balises [QUOTE] et [QUOTE] ajoutées par BigBoomShakala. Pensez à les utiliser, merci]

  4. #4
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Par défaut
    Un petit effort pour rendre lisible les messages SVP

  5. #5
    Membre émérite Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Par défaut
    Bonsoir,

    En fait, pour préciser mon probleme en fait, une seconde vue est associé au meme document mais je ne peux accéder aux fonctions et données du document avec la méthode Getdocument(). Des messages d'erreurs me disent que c'est imposible de convertir un CDocument en CAppliDoc. De plus, la méthode GetDocument ne se trouve pas dans la seconde vue créée, dois je la rajouter?
    Comment pourrais je faire à partir de ma seconde vue associée au docment pour avour accès au document?
    Bien j'espère que vous pourrez m'aider.

    Merci

    Nicolas

  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
    salut,oui
    dans ton .h tu devrais avoir:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    // en dehors de la classe 
    #ifndef _DEBUG  // debug version in CSecondView.cpp
    inline CPixcorDoc* CSecondView::GetDocument()
       { return static_cast<CPixcorDoc*>(m_pDocument); }
    #endif
    dans la classe rajouter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CPixcorDoc* GetDocument();
    dans le .cpp:
    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
     
    #ifdef _DEBUG
    void CSecondView::AssertValid() const
    {
    	CFormView::AssertValid();
    }
     
    void CSecondView::Dump(CDumpContext& dc) const
    {
    	CFormView::Dump(dc);
    }
     
    CPixcorDoc* CSecondView::GetDocument() // non-debug version is inline
    {
    	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CPixcorDoc)));
    	return static_cast<CPixcorDoc*>(m_pDocument);
    }
    #endif //_DEBUG
    note: j'ai mis CFormView comme classe de base ,mais je ne connais pas ta classe de base ,donc a remplacer par la bonne classe le cas echeant.
    ton source doit avoir l'include de la classe document avant celui du .h de cette classe exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #include "PixcorDoc.h"
    #include "SecondView.h"

  7. #7
    Membre émérite Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Par défaut
    D'accord je vais essayer cela, en fait ma classe de base est CView et non CFormView, peut être que l'erreur est la. A ce jour, en créant cette nouvelle vue il me manquait la fonction GetDocument(). A la base, elle doit être générée automatiquement ou il faut la rajouter?
    Puis appeller
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CPixorDoc = GetDocument()
    dans la donction OnDraw

    Sinon je n'aurais jamais pensé qu'il y avait un ordre dans les include, je ne me suis pas du tout soucier de cela donc faudra que j'en tienne bien compte.

    Merci en tout cas, je tiendrais au courant de l'évolution.

    Nicolas

  8. #8
    Membre émérite Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Par défaut
    Bien merci ca fonctionne, en fait le problème venait de l'ordre de déclaration des fichiers .h. Mon include sur le doc se trouvait après celui de la vie et ca faisait planté...Quelque chose à savoir.
    D'ailleurs si vous pouviez brièvement m'expliquer.

    Bonne journée

    Nicolas

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

Discussions similaires

  1. [WD-2013] Créer une page en paysage dans un document en portrait
    Par geenak2011 dans le forum Word
    Réponses: 4
    Dernier message: 21/02/2014, 09h45
  2. Créer une nouvelle vue
    Par ciolvic dans le forum Android
    Réponses: 5
    Dernier message: 20/11/2012, 14h14
  3. Réponses: 4
    Dernier message: 06/08/2012, 00h41
  4. Réponses: 0
    Dernier message: 28/11/2008, 17h36
  5. Créer une table d'association ou pas?
    Par contremaitre dans le forum Langage SQL
    Réponses: 1
    Dernier message: 25/06/2008, 11h52

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