Ein Splitter, 2 Views und das gleiche Doc



  • Hi,

    Ich erstelle einen vertikalen Splitter. Im oberen Teil setze ich die Viewklasse CEditView und im unteren Teil die Klasse CHtmlEditView. Das ganze funktioniert so auch gut. Der untere Teil soll das selbe Dokument benutzen wie der obere Teil, da dieser ja die HTML-Seite anzeigt wie sie im oberen teil gecodet wurde. Nun genau bleibe ich hängen, entweder kann ich es so machen das der Code im CEditView angezeigt wird oder die HTML-Seite um CHtmlEditView.

    Was musss ich tun, damit beides angezeigt werden kann und dass auch beide Klassen das selbe Dokument verwenden so dass ich die änderungen immer aufs gleiche Dokument beziehen.

    MFG Gfxer



  • Also: Es geht auf jeden Fall.

    Leider habe ich das Programm, wo ich das gemacht habe nicht mehr. Und ich wieß auch nicht mehr, wie das ging.
    Aber ich würde es mit dem entsprechenden DocTemplate versuchen.

    Viel Erfolg 🙂

    PS: Kannst die Lösung ja mal posten.



  • 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*


Anmelden zum Antworten