Problem mit Trennung von Doc und View



  • Hi,

    mein Problem betrifft wie der Titel schhon sagt die Trennun von Doc und View.
    Allendings ist das Prob. eher technischer Natur.
    Mein Projekt beinhaltet ein RTFView und ein RTFContol.
    Nun soll einfach eine Textdatei geladen werden und der Inhalt im View Angezeigt werden !
    Da das Doc die Daten hält habe ich eine globale Variable

    CString cstrAusgabe;
    

    in der Doc.h angelegt.
    Due Lade Routine habe ich in die View.cpp gepackt in onFileNew(). Dort übergebe ich den Inhalt der Textdatei an die Variable in der Doc.h

    pDoc->cstrAusgabe = str;
    

    .
    Die Ausgabe der Texdatei erfolgt ebenfalls in der Viel.cpp in onInitialUpdate().
    Dort hohle ich die Daten aus der Variablen in Doc.h !

    Nur wird nichts ausgegeben, ohne Fehlermeldung !
    Es passiert nichts !😕 😕 😕

    Hier der Code in der View.cpp :

    void CSDI_Weg_durchs_LabyrinthView::OnInitialUpdate()
    {		
     		CSDI_Weg_durchs_LabyrinthDoc *pDoc = GetDocument ();
    
    		CRichEditCtrl& rCtrl = GetRichEditCtrl(); // Pointer auf das RichEditControl erstellen um dessen Funktionen zu nutzen
    		CHARFORMAT cfm;							  // Struktur die die Aktionen der Selektion enthält
    		CFont myFont;
    		myFont.CreatePointFont(150,"Terminal",NULL); // Font erstellen
    	  	rCtrl.SetFont(&myFont);
    
    		rCtrl.ReplaceSel(pDoc->cstrAusgabe);
    		// rCtrl.SetSel(0,100);		
    		cfm.cbSize		= sizeof(CHARFORMAT);			// Funktionen
    		cfm.dwMask		= CFM_BOLD;						// des RichEditCONTROLS zur
    		cfm.dwEffects	= CFM_BOLD;						// formatierten Darstellung benutzen
      		rCtrl.SetSelectionCharFormat (cfm);				// Aktionen der Selektion ausführen
    
    	// Druckränder festlegen (720 Twips = 1/2 Zoll).
    	SetMargins(CRect(720, 720, 720, 720));
    }
    
    void CSDI_Weg_durchs_LabyrinthView::OnFileOpen() 
    {
    	 	char strFilter[] = { "txt Files (*.txt)|*.txt|All Files (*.*)|*.*||" }; // Filterstring für den Windows Dialog Datei - Öffnen
    	    CFileDialog m_File(TRUE, ".txt", NULL, 0, strFilter); // Objekt der Klasse CFileDialog erstellen
    		CFile	file;										  // Objekt der Klasse CFile erstellen
    		CSDI_Weg_durchs_LabyrinthDoc *pDoc = GetDocument ();
    
    		TCHAR *str = NULL;
    		CString m_strDateiname;
    
    	    if(m_File.DoModal()==IDOK)							// Dialogfeld öffnen und Ergebnis auffangen
    	    {	
    			m_strDateiname = m_File.GetFileName();			// Gewählten Dateinamen ermitteln
    
    			file.Open(m_File.GetFileName(), file.modeRead); // Ausgewählte Datei öffnen
    			str = new TCHAR[(file.GetLength())+1];			// TChar Array auf Heap schieben damit es dynamisch wird
    			str[(file.GetLength())] = '\0';					// TChar Array mit 0 terminieren
    			file.Read(str, file.GetLength());				// File lesen und Array str mit Werten füllen
    
    		 	pDoc->cstrAusgabe = str;								// Werte von TChar Array in CString "cstrAusgabe" schreiben	
    			file.Close();									// File wieder schließen
    			delete[]str;
    	    }			
    
    }
    

    hoffentlich könnt Ihr mir helfen ! 👍
    Danke auf jeden Fall...!!!
    ShadowEater


  • Mod

    OnInitialUpdate wird evtl. vorher aufgerufen.
    Bau einfach die ganze Behandlung in CView::OnUpdate ein. Sorge evtl. durch den Aufruf von CDocuemnt::UpdateAllViews für den gezielten Datenaustausch.

    Du kannst auch entsprechende. Hints verwenden (Parameter von UpdateAllViews), die steuern was in OnUpdate wirklich im View geändert werden soll.



  • Hi Martin,

    meinst Du mit ganze behandlung den Teil der in onInitialUpdate() liegt ?

    ;9
    ShadowEater



  • Hmmm wenn ich in OnUpdate direkt einen Text ausgeben lassen will geht das aber auch nicht !

    😉
    ShadowEater


  • Mod

    Nein! Ich meine nur die Übergabe der Daten.


Anmelden zum Antworten