pointer auf CDocument?



  • Habe eine MDI-Anwendung in der ich einen Pointer auf das aktuelle Dokument benötige. In der Datei *Proj*View.cpp ist ja schon ein Pointer auf CDocument vorhanden{getDocument Funktion in OnDraw()}, den kann ich nur nicht nachbauen. Brauch genau so einen pointer in der CChildFrm.cpp und MainFrm.cpp.

    Weiß jemand wie ich diesen Pointer hinbekomme(entweder mit dieser getDocument Funktion oder halt anders)

    mein Versuch war:

    CDBBDoc* pDoc = new CDBBDoc();

    Es kommt keine Fehlermeldung aber der Pointer funktioniert irgendwie nicht...



  • Interessante Frage. Ich hab in der MSDN Library diese Funktion gefunden.

    virtual CDocument* GetActiveDocument( );
    

    Return Value
    A pointer to the current CDocument. If there is no current document, returns NULL.

    Könnte bei dir hilfreich sein, da es eine Memberfunktion von CFrameWnd ist.

    Mich würde jedoch interessieren, wie ich von einer beliebigen Klasse auf die Daten des Documents zugreifen kann. Hab bis jetzt immer den Doc Zeiger, den ich in der View bekommen konnte, beim Funktionsaufruf mit in der Parameterliste übergeben. Bei meinem aktuellen Problem ist das aber nur schwer möglich. Gibt es dafür eine bessere Lösung?



  • ja-das dürfte das sein was ich suche!!!
    und wie wende ich diesen pointer an?



  • Na zuerst erzeugst du den Pointer.

    CMyDoc* pDoc = GetActiveDocument();
    

    Und dann kannst du mit dem Zeiger auf die public Elemente und Funktionen zugreifen. Zum Beispiel:

    bla = pDoc->m_iBla;          // Zugriff auf ein Element von CMyDoc 
    blabla = pDoc->GetBlabla();  // Aufruf einer Memberfunktion von CMyDoc
    

    So sollte es eigentlich funktionieren.

    Ich wäre aber immernoch sehr dankbar für eine Hilfestellung zu meinem Problem. 😞



  • ich habs!
    hab im netz folgende zeilen gefunden:

    CMDIChildWnd *pChild = ((CMainFrame *)AfxGetMainWnd())->
                  MDIGetActive();
    
    CMyDoc * pDoc = ((CMyDoc *)pChild->
                     GetActiveDocument());
    

    wenn du jetzt noch die MainFrm.h includierst hast du den gewünschten pointer!
    zumindest bei mir hats funktioniert...*freu* :p


Log in to reply