MDI: View nach Dateiendeung...
-
Hallo,
ein MDI-templete erzeugt ja für jedes geöffnete Dokument ein neues CDokument und eine neue View (CChildView).
Wie kann ich meine View abhängig vom Dateitypen machen?
Also z.B:
Dateiendung - View-Klasse
.abc | CabcView
.def | CdefView
etc...Also ich möchte praktisch für verschiedene Dateitypen eine andere View-Klasse als Ansicht benutzen.
Jemand eine AHnung wie man das macht?
Gruß Stu
-
Dann erzeuge unterschiedliche Doctemplates mit den entsprechenden Endungen und Views. Registriere sie alle und danach wird Deine MDI Applikation beim Datei öffnen Dialog die neuen Typen anbieten und auch die Datei für das entsprechende Doc/View paar öffnen.
-
Ahso, dann erzeuge ich mir nen Frame,View,Doc und adde das AddDocTemplate.
CMultiDocTemplate* pDocTemplate; pDocTemplate = new CMultiDocTemplate( IDR_MDITYPE, RUNTIME_CLASS(CMDIDoc), RUNTIME_CLASS(CChildFrame), // custom MDI child frame RUNTIME_CLASS(CMDIView)); AddDocTemplate(pDocTemplate);Ich vermute mal, die Dateiendung wird mit CDocTemplate::MatchDocType eingeben, aber diese funktion ist ja eine "Overridable".
Ist diese Funktion überhaupt richitg? hat jemand eine Ahnung wie das einfügen/verknüpfen von Dateiendungen in der Praxis funktioniert?
-
is schon ne weile her das ich das mal gemacht hab bestimmt gibts da noch ne galantere lösung.
in der header deiner ..App classe erstellst du ne variable vom typ
CMultiDocTemplateCMultiDocTemplate* m_pMyNewForm;in der cpp der app classe schreibst du unterhalb der ersten CMultiDocTemplate erstellung
CMultiDocTemplate* pDocTemplate; pDocTemplate = new CMultiDocTemplate( IDR_MDITYPE, RUNTIME_CLASS(CMDIDoc), RUNTIME_CLASS(CChildFrame), // custom MDI child frame RUNTIME_CLASS(CMDIView)); AddDocTemplate(pDocTemplate); m_pMyNewForm = new CMultiDocTemplate( IDD_NEUERDIALOG_DLG, RUNTIME_CLASS(CMDIDoc), RUNTIME_CLASS(CChildFrame), RUNTIME_CLASS(CNeuerDialogDlg));//<--- is bei mir ne FormView AddDocTemplate(m_pMyNewForm);dort wo du dein neues document öffnen willst schreibst du dann
CDocument *pDoc = (CDocument*)GetDocument(); CFrameWnd *frameWnd = ((CMDIApp*)AfxGetApp())->m_pMyNewForm->CreateNewFrame(pDoc, NULL); frameWnd->InitialUpdateFrame(pDoc, TRUE);//Öffnet neues Document mit der CFormViewis natürlich egal was du für ne ...View nimmst. geht mit jeder.
hab den code jetzt nicht getestet wie gesagt is schon ne weile her das ich das gemacht hab sollte aber so funzenmfg
LowFly
-
ah danke , das Darstellen des Frames Funktioniert.
Nur müsste für den neuen Frame kein "Neus Dokument" erzeugt werden?
Denn bei der beschreibung von den Parametern von "CreateNewFrame" steht :
pDoc: The document to which the new frame window should refer. Can be NULL.D.h mann kann da nen zeiger angeben, auf das zugehörige CDokument zeigt, aber mit "CreateNewFrame" müsste doch ein neues Erzeugt werden?
Wo ruft man denn "CreateNewFrame" auf. Denn wenn man das im MainFrm macht, kann man ja schlecht die GetDokument Funktion benutzen?