Ein Splitter, 2 Views und das gleiche Doc
-
Also das es eigentlich funktionieren sollte weiss ich auch. Aber eben wie das geht, dass weiss ich nicht.
-
Hast du denn schon 2 Views mit 2 Docs? Das wäre ja der "normale" Weg und das geht halbwegs einfach.
Ist das eine SDI? Erzähl doch ein bischen mehr.
-
Also es ist eine MDI-Anwendung aber ausser das der Splitter im Child-Frame statt im MainFrame erstellt wird ist nicht viel anderst. Ich habe eine normale CDocument Klasse und eben die CEditView Klasse auf der eine Seite und auf der anderen habe ich die zwei Klassen CHtmlEditDoc und CHtmlEditView. Da aber mit beiden Views das selbe Dokument bearbeitet werden soll, sind für mich zwei Doc-Klassen überflüssig. Also eigentlich muss ich die Klasse CHtmlEditDoc benutzen, da ich von CHtmlEditView aus nicht über CDocument abspeichern kann.
-
Irgendwo machst du doch deine DocTemplates. Was passiert, wenn du da einfach BEIDE Male das HtmlDoc reinschreibst?
Hast du das mal versucht? Wäre für mich logisch...
-
Setzt ich die Klasse CHtmlEditDoc auch für das CEditView ein, dann kann das HTML-File nicht gelesen, es wird also nichts angezeigt. Wenn ich für das erste Template, die Codeansicht, CHtmlEditDoc verwende, dann sehe ich nur die Ansicht des HTML-Files. Verwende ich CDocument, dann sehe ich nur den Code.
Die Templates mache ich so:
BOOL CCrashHTMLApp::InitInstance() { ... pDocTemplateCode = new CMultiDocTemplate( IDR_CRASHHTYPE, RUNTIME_CLASS(CCrashHTMLDoc), //CDocuemnt RUNTIME_CLASS(CChildFrame) RUNTIME_CLASS(CCrashHTMLView)); //CEditView AddDocTemplate(pDocTemplateCode); pDocTemplatePreview = new CMultiDocTemplate( IDR_CRASHHTYPE, RUNTIME_CLASS(CHTMLEditDoc), //CHtmlEditDoc RUNTIME_CLASS(CChildFrame), RUNTIME_CLASS(CHTMLEditView)); //CHtmlEditView AddDocTemplate(pDocTemplatePreview); ... }Den Splitter erstelle ich hier:
BOOL CChildFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) { // create a splitter with 2 rows, 1 column if (!m_pwndSplitter->CreateStatic(this, 2, 1)) { TRACE0("Failed to CreateStaticSplitter\n"); return FALSE; } // add the second splitter pane - an input view in row 0 if (!m_pwndSplitter->CreateView(0, 0, pContext->m_pNewViewClass, CSize(100, 100), pContext)) { TRACE0("Failed to create second pane\n"); return FALSE; } // add the first splitter pane - the default view in row 1 if (!m_pwndSplitter->CreateView(1, 0, RUNTIME_CLASS(CHTMLEditView), CSize(0, 0), pContext)) { TRACE0("Failed to create first pane\n"); return FALSE; } return TRUE; }Habe ich vielleicht was vergessen?
-
Und wenn du eine Klasse von CEditDoc UND CHtmlDoc ableitest? Die sollte dann doch alle Fähigkeiten haben, die du brauchst.
Der Code für den Splitter scheint nix mit den Docs zu tun zu haben.
Tja, wenn meine Idee oben nicht hilft, dann hab ich keine mehr. Sagt die MSDN oder irgendwelche Bücker nix dazu?
-
Das komische ist, er regiert immer darauf, wass ich dem ersten Template (pDocTemplateCode) als Doc-Klasse angegeben habe. Ist es CDocuemnt sehe ich eben den Code sonst die Webseite.
Tutorials und solches habe ich schon viele gefunden, aber keines befasst sich damit, ein und dasselbe Dokument in zwei unterschiedlichen Views anzuzeigen.
-
In meinem Lieblingsbuch ist ein Beispiel: Wanderer. Das hier scheint der Quelltext zu sein: http://www.ecs.syr.edu/faculty/fawcett/handouts/CSE778/Lecture6/Wanderer/
Programming Windows with MFC | ISBN: 1572316950
Könnte dir weiterhelfen. Oder probier doch einfach mal, eine "Explorer-Style" Anwendung auf deine Bedürfnisse umzubauen.
-
Ich schau es mir mal an. Aber ich weiss jetzt jetzt genau wo der Fehler liegt. Beide Views können nicht mit der Docuemt-Klasse des anderen umgehen. Also muss ich irgendwie zuerst eine Doc Klasse übergeben, das erste View erstellen, dann die nächste Doc Klasse übergeben und das zweite View erstellen. Aber geht das überhaupt und wenn ja wie?
-
*ratlos*