Vom Dialog aufs Doc zugreifen



  • Hallo, versuch mich gerade an einem MFC-Programm.

    Hab ein Dialog erstelt und möchte meinen TreeControll nun abhängig der Daten in Document darstellen.

    Wie bekomm ich zugriff auf das Dokument?

    Das hier funktioniert leider nicht

    CstudienleistungDoc* pDoc = this->GetParent();
    


  • Hab im Netz was gefunden, versteh es nicht, aber es funktioniert.

    Was macht ich hier?

    CMDIChildWnd *pActiveFrame;
    pActiveFrame =(CMDIChildWnd*)
    ((CMDIFrameWnd*)(AfxGetApp()->m_pMainWnd))->MDIGetActive();
    CstudienleistungDoc* pDoc = CstudienleistungDoc*)pActiveFrame->GetActiveDocument();
    Geovektor geo_vektor = pDoc->thedata.getGeos();
    

  • Mod

    Lass doch diesen Quark und übergib einfach Deinen Dialog im Konstruktor oder eine member Variable einen Zeiger auf Dein Dokument!



  • Oder sag uns ob es sich dabei um eine SDI oder MDI Anwendung handelt ...



  • Wenn der MDI-Kram funktioniert, kanns wohl kaum eine SDI sein, oder? 😉



  • Ups dachte das Golem nicht der Threadersteller wäre ^^ Ja dann stimmts wohl ^^


  • Mod

    (D)Evil schrieb:

    Oder sag uns ob es sich dabei um eine SDI oder MDI Anwendung handelt ...

    Aber selbst dann, wäre der Weg den Golem hier selbst gefunden hat ein falscher... 🕶



  • Ich hab das gleiche Problem (MDI mit Daten im Doc und will von einem Dialog drauf zugreifen), ich will es aber richtig machen, hab aber noch Verständnisprobleme:

    Martin Richter schrieb:

    Lass doch diesen Quark und übergib einfach Deinen Dialog im Konstruktor oder eine member Variable einen Zeiger auf Dein Dokument!

    Wenn ich die Dialogklasse im Konstuktor eines Dokumentes aufrufe brauch ich ja noch eine Variable, aber was mach ich dann mit der im doc? Ich brauch doch was, womit ich im Dialog arbeite(dachte ich).
    Im zweiten Fall das gleiche.

    Micha



  • Was Martin meint, du sollst im Konstructor deiner Dialogklasse der Zeiger oder die Referenz auf deine Dokumentenklasse mit übergeben.

    *.h
    CDeinDlg(CDeinDocument *Doc,CWnd* pParent = NULL);	// Standard-Konstruktor
    
    *.cpp
    CDeinDlg::CDeinDlg(CDeinDocument *Doc,CWnd* pParent /*=NULL*/)
    	: CDialog(CDeinDlg::IDD, pParent)
    {
        m_Doc = Doc;
    }
    

    Nur mal so als Beispiel.

    Gruß Matthias



  • Fettes Danke für das Beispiel!

    es gibt da aber noch ein Problem: Will ich den Dialog modal aufrufen (edit: aus view oder app) kommt da die Fehlermeldung:
    error C2512: 'DeinDlg': Kein geeigneter Standardkonstruktor verfügbar

    edit2:
    Das Problem ist nun gelöst. Der Konstruktor muss ZUSÄTZLICH in die Klasse mit eingefügt werden und nicht den Alten überschreiben!
    Sorry für die dummen Fragen; wer lesen kann ist klar im Vorteil!

    Micha

    Nachtrag: bei MDI kann man dann die aktuellen Daten dann mit

    m_Doc = dynamic_cast<CZFGScrollDoc*>(((CMainFrame*)AfxGetMainWnd())->MDIGetActive()->GetActiveView()->GetDocument());
    

    in sein Dialog holen
    Interessanter link an der stelle:
    http://www.codeguru.com/forum/showthread.php?t=281430


Log in to reply