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 VariableCString 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.hpDoc->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
-
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
-
Nein! Ich meine nur die Übergabe der Daten.