MDI-Document - Ansichten
-
Hallo Leute
Neues Projekt neue Fragen.
Ich habe noch nie an einem MDI-Projekt gearbeitet.
Was die Literatur so bietet ist nicht gerade sehr viel.
Auch wurden meine folgenden Fragen schon mehrfach gestellt ,
jedoch nicht erschöpfend beantwortet.
Also das Projekt erstellen und damit arbeiten ist ja gar nicht so sehr das Problem.
Aber nun möchte ich neue Fenster öffnen welche jedoch jedes eine ander Ansichtsart hat ,
wie zB HTMLView orde Formview.
Ich habe das nun so weit verstanden , dass man dazu jeweils eine eigene
Documentklasse erstellen und dazu entsprechend eine View-Klasse .
Frag ist nur: wie erstelle ich diese Klassen?Vielleicht hat ja jemand ein gutes Tutorial oder BUch wo das entspechend erklärt wird,
auf jedenfall wäre ich für Eure Hilfe sehr dankbar.Danke und Gruß
Linus
-
hab das mal schnell aus nem anderen thread kopiert wo ich darauf geantwortet hab der lag glaub ich auf der zweiten seite ganz unten

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],//<--hier gegebenen fals die ID deklaration eures Dialoges eintragen RUNTIME_CLASS(C.....Doc),//<--Hier die Documentklasse eures Projectes eintragen RUNTIME_CLASS(CChildFrame), RUNTIME_CLASS( [b]CNewFormView[/b]));//<--hier die Neu erstellte Klasse eintragen // AddDocTemplate(m_pDocFormView); m_pDocEditView = new CMultiDocTemplate( IDR_CHANGETYPE,//<-- hier könnte man ein neues Menu eintragen RUNTIME_CLASS(C....Doc),),//<--Hier die Documentklasse eures Projectes eintragen RUNTIME_CLASS(CChildFrame), RUNTIME_CLASS( [b]CNewEditView[/b]));//<--hier die Neu erstellte Klasse eintragen // 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 Viewin 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 = ((C....App*)AfxGetApp())->[b]m_pDocEditView[/b]->CreateNewFrame(pDoc, NULL); frameWnd->InitialUpdateFrame(pDoc, TRUE);in die OnFormview() funktion schreibst du
CDocument *pDoc = (CDocument*)GetDocument(); CFrameWnd *frameWnd = ((C....App*)AfxGetApp())->[b]m_pDocFormView[/b]->CreateNewFrame(pDoc, NULL); frameWnd->InitialUpdateFrame(pDoc, TRUE);danach sollten die verschieden view's je nach button klick aufgehn.
NEW EDIT:
erstell die button im Menu aber nicht im MainFrame menu
-
Danke für die Antwort.
Ich habe versucht DeinerAnweisung zu folgen . Dabei habe ich nur 3 Probleme/Fragen:
m_pDocFormView = new CMultiDocTemplate(
IDD_FORMVIEW,
RUNTIME_CLASS(CChangeViewsDoc),
RUNTIME_CLASS(CChildFrame),
RUNTIME_CLASS( CNewFormView));Mein Compiler streikt bzgl CChangeViewsDoc: Keine Klasse oder Namespace
in der Haupt C...View.cpp deiner Anwendung erstellst du jetzt für die 2 Button in der Menuleiste ein COMMAND Funktion
Mein Projekt hat nur folgende Klassen:
CmditestApp
CmditestDoc
CmditestView
CNewFormView
CMainFrame
CChildFrame
CAboutDlgWas meinst Du mit Haupt C...View.cpp?
Wenn ich in CmditestView eine COMMAND-Funktion erstelle so sind
dort jedoch die Membervariablen m_pDocEditView und m_pDocFormView nicht bekannt.// AddDocTemplate(m_pDocFormView);
Warum hast Du diese Zeile herausgenomen?
Danke für Deine Hilfe
Gruß Linus
-
1:
Mein Compiler streikt bzgl CChangeViewsDoc: Keine Klasse oder Namespace
upps sorry mein fehler
hier gehört in deinem fall CmditestDoc hin und für IDD_FORMVIEW must du die ID deklaration deines dialoges eintragen.2:
Was meinst Du mit Haupt C...View.cpp?
das wäre bei dir die CmditestView
somit auch die button funktion in diese classeWenn ich in CmditestView eine COMMAND-Funktion erstelle so sind
dort jedoch die Membervariablen m_pDocEditView und m_pDocFormView nicht bekanntdoch sind sie da du sie in der C...App.h erstellen sollst das wäre bei dir die CmditestApp und diese wird bei dir in der CmditestView.cpp unterhalb der StdAfx.h includet sollte bei dir #include "mditest.h" heisen
//AddDocTemplate(m_pDocFormView);
Warum hast Du diese Zeile herausgenomen?schalt sie an und du wirst sehn was passiert
LOL nein die function AddDocTemplate sorgt dafür das beim start deines progs. die standart seite aufgeht. und zwar die in der C...App unter pDocTemplate deklariert wurde. wenn du nun mehrer MultiDocTemplates an die funktion AddDocTemplate übergibst kommt bevor dein prog startet ein kleiner dialog in dem du wählen kannst welche seite als erstes erscheint. das wollte ich dir ersparen. aber wie gesagt probier es einfach mal aus 
NEW EDIT:
mir ist da noch was aufgefallen
hier in dieser zeile bei den buttonfunktionenCFrameWnd *frameWnd = (([b]C....App[/b]*)AfxGetApp())->mist du C....App mit deiner klasse CmditestApp austauschen
-
Klappt prima
genau das was ich suchteVielen Dank
Linus