Mehrere Views für ein Dokument

Rearhh

Mitglied
Ich habe ein Dokument, in denen Daten ausgewertet werden, die ich einmal als Tabelle und einmal als Graphen darstellen möchte. Ich verwende eine MDI-Architektur.
Nun habe ich Probleme, der Dokumentenklasse eine zweite View für den Graphen aufzuzwingen:

gibt es da einen relativ einfachen Weg z.B. via AddView Ich hab das MSDN-Beispiel mir zur Vorlage genommen, aber das Programm läuft kein Stück.... :(
 
Hallo,

ich habe auch 2 Dokumente in meinem Projekt. Denke ich kann dir helfen.
Du benötigst für dein 2tes Dokument eine eigene zusätzliche CDocument- und CFormView-Klasse

- Erstelle dir z. B. einen zusätzlichen Dialog, also dein 2tes Dokument in der Resource-Ansicht und dazu zwei von CDocument und CFormView abgeleitete Klassen (bsp. CDocNr2 und CViewNr2).
- Dann benötigst du in deiner App-Klasse eine Membervariable vom Typ CMulitDocTemplate (bsp. CMultiDocTemplate* pDocTemplateNr2).
- Beim ::InitInstance() der App-Klasse dann folgendes

Code:
	pDocTemplateNr2= new CMultiDocTemplate(  
		IDR_NEUERDIALOG,
		RUNTIME_CLASS(CDocNr2 ),
		RUNTIME_CLASS(CChildFrame), // custom MDI child frame
		RUNTIME_CLASS(CViewNr2));
	AddDocTemplate(pDocTemplateNr2);

Falls das zu schwierig ist, sags nochmal bescheid, dann kann ich es dir nochmal erklären.
 
@lukasS: Ich glaube, Du hast das mißverstanden. Er will keinen 2. Dokumenttyp, sondern eine 2. ansicht auf die Daten seines Dokumentes.
@Rearhh:Ich glaube, was Du suchst ist CFrameWnd::CreateView(...). Ein neuer View wird dem Rahmenfenster hinzugefügt.
 
:) *konfus*

Ich weiss nun selber nicht mehr genau was ich will.... ;)

jokey2 hat Recht, ich hätte gerne eine zweite Ansicht. Allerdings komm ich gerade ins Grübeln, dass ein zweites Doc/View vielleicht gar nicht so verkehrt wäre. Dann hätte ich ein Doc/View zur Datenverwaltung und ein anderes zur Datenauswertung...... ufff.....

@lukasS: danke für Anleitung. Die hat mir sehr geholfen, weil sie mir genau die Bausteine geliefert hat, die ich noch brauchte um den Vorgang vollends zu verstehen. Du hast quasi nen echten Volltreffer gelandet. Danke. Aber ich komm nicht mehr ganz weiter. Ich hab eine zweite Doc/View erschaffen, aber wie bringe ich sie zur Anzeige. Ich glaube, ich muss die OnNewDocument() - Funktion meines 2. Dokumentes aufrufen, richtig? Weiss du, wie ich einen Zeiger auf dieses Dokument kriege? Ich bin, was das angeht, noch richtig grün hinter den Ohren :/

@jokey2: danke für den Hinweis mit dem CreateView. Das trifft wahrscheinlich genau das, was ich suche und es wird mich jetzt eine gute Weile mit der MSDN beschäftigen ;)
 
Versuchs mal mit der Neuerstellten Membervarialbe pDocTemplateNr2->OpenDocumentFile(NULL), dann landest du in der View beim OnInitialUpdate()

Lukas
 
:)

Weils so schön ist... muss ich noch einen Kontext (CCreateContext) oder deratiges erstellen? Bei pDocTemplateNr2->OpenDocumentFile(NULL) werden zwar sowohl Document und View erzeugt, jedoch bekomm ich, auf Teufel komm raus, via GetDocument(), keine Verbindung für die View zum Document.... :(
 
Weiß nicht, ob dir das weiterhilft, habe mal bißchen 'kot' reingeschrieben, aber nicht kompiliert. Wenn du bsp aus der App-Klasse auf eine bestimmte View zugreifen willst, dann:

Code:
POSITION posDoc = pDocTemplateNr2->GetFirstDocPosition();
pDocTemplate->OpenDocumentFile(NULL);

while(posDoc)
{
	CDocumentNr2* pDoc = (CDocumentNr2*)pDocTempFiles->GetNextDoc(posDoc);
	POSITION posView = pDoc->GetFirstViewPosition();
	CString s = pDoc->GetTitle();//Kannst dir hier sogar den Titel von deinem Dokument holen
	while(posView)
	{
		CViewNr2* pView = (CViewNr2*)pDoc->GetNextView(posView);
		//pView ist jetzt das View, worauf du zugreifen willst.
	}
}

Sieht vielleicht Brutal aus, ist aber im Prinzip einfach, weiß nicht, ob es einen einfacheren Weg gibt, aber so habe ich das auch erfolgreich gemacht.

Lukas
 
Zuletzt bearbeitet:
Zurück