MDI-Anwendung - mehrere unterschiedliche Child-Fenster



  • Hallo,

    ich möchte gerne eine MDI-Anwendung schreiben, in der ich mehrer Kind-Fenster mit unterschiedlichen Inhalten aufrufen kann. Wie kann ich das machen?
    Habe mehrere Klassen und jeweils soll im Prinzip für jede Klasse ein Kindfenster für die Darstellung existieren.

    Ich bekomme es momentan leider nur hin, dass in allen Kindfenstern das gleiche angezeigt wird.

    Vielen Dank für Eure Hilfe.

    Marcus



  • ich weis jetzt nicht ob das der galanteste weg ist aber er funzt, bzw ob ich dich überhaupt richtig verstanden hab 😉

    geh in dein MDI Project und erstell dir unter Arbeitsbereich/Resourcen/Dialog einen neuen FormViewDialog (IDD_FORMVIEW). Rechte Maustaste auf den Dialog und öffne den Klassenassi und erstelle für den FormViewDialog eine neue klasse (CNewFormView) achte aber darauf das du die neue klasse nicht von CDialog ableitest sondern von CFormView.

    geh jetzt in die Menuleiste des MFC Einfügen/Neue Klasse und erstell dir eine weiter neue Klasse (CNewEditView) diese leitest du von CEditView ab.

    Geh jetzt in die C....App.cpp klasse deiner Anwendung. als erstes includest du jetzt die Header der gerade erstellten klassen. unterhalb der vorhandenen include dateien.

    mach jetzt die C....App.h auf und erstell zwei variablen

    CMultiDocTemplate* m_pDocFormView;
    CMultiDocTemplate* m_pDocEditView;
    

    in der C...App::InitInstance() schreibst du unter

    CMultiDocTemplate* pDocTemplate;
    pDocTemplate = new CMultiDocTemplate(
    .....);
    AddDocTemplate(pDocTemplate);

    m_pDocFormView = new CMultiDocTemplate(
    		[b]IDD_FORMVIEW[/b],
    		RUNTIME_CLASS(CChangeViewsDoc),
    		RUNTIME_CLASS(CChildFrame), 
    		RUNTIME_CLASS( [b]CNewFormView[/b]));
    //	AddDocTemplate(m_pDocFormView);
    
    	m_pDocEditView = new CMultiDocTemplate(
    		IDR_CHANGETYPE,
    		RUNTIME_CLASS(CChangeViewsDoc),
    		RUNTIME_CLASS(CChildFrame), 
    		RUNTIME_CLASS( [b]CNewEditView[/b]));
    //	AddDocTemplate(m_pDocEditView);
    

    unter Arbeitsbereich/Resourcen/Menu unter Ansicht (oder wo es dir beliebt) erstellst du zwei neue Button
    IDC_FORMVIEW //Beschriftung Form View
    IDC_EDITVIEW //Beschriftung Edit View

    in der Haupt C...View.cpp deiner Anwendung erstellst du jetzt für die 2 Button in der Menuleiste ein COMMAND Funktion.

    in die OnEditview() Funktion schreibst du

    CDocument *pDoc = (CDocument*)GetDocument();
    CFrameWnd *frameWnd = ((CChangeViewsApp*)AfxGetApp())->[b]m_pDocEditView[/b]->CreateNewFrame(pDoc, NULL);
    frameWnd->InitialUpdateFrame(pDoc, TRUE);
    

    in die OnFormview() funktion schreibst du

    CDocument *pDoc = (CDocument*)GetDocument();
    CFrameWnd *frameWnd = ((CChangeViewsApp*)AfxGetApp())->[b]m_pDocFormView[/b]->CreateNewFrame(pDoc, NULL);
    frameWnd->InitialUpdateFrame(pDoc, TRUE);
    

    danach sollten die verschieden view's je nach button klick aufgehn.



  • Hallo. Vielen Dank. Das wechseln zwischen den child-views funktioniert so wunderbar.

    Aber dazu noch eine Frage.

    Wie bekomme ich denn jetzt in dem "neuen" child auf mein Document?


Anmelden zum Antworten