Будем пробовать обобщать прошлые данные. Итак, мы можем от CWinApp дойти до любого CView и обратно от CView до CWinApp. Давайте разложим все по полочкам. Идем туда:
// CWinApp AfxGetApp(); // CDocTemplate GetFirstDocTemplatePosition(); GetNextDocTemplate(pos); // CDocument GetFirstDocPosition(); GetNextDoc(DocPos); // CView GetFirstViewPosition() GetNextView(ViewPos);
Это мы с Вами уже делали в прошлых шагах. Теперь в обратную сторону от вида :-) Для точного понимания как и куда попадем :-). Для этого создадим новый пункт в меню из прошлого проекта и привяжем его к классу вида :-)
//////////////////////////////////////////////// // CMy22View message handlers void CMy22View::OnViewInfomdiview() { }
Вот так и пойдем вверх. Первое, что мы должны получить - это к какому документу привязан вид. Это можно сделать используя функцию вида GetDocument()
// CDocument* GetDocument( ) const; // void CMy22View::OnViewInfomdiview() { CDocument* cd=GetDocument(); if (cd!=NULL) { AfxMessageBox("Cool"); } else AfxMessageBox("Error Document"); }
Теперь нам надо получить шаблон, в котором содержится документ. Это можно сделать воспользовавшись GetDocTemplate()
// CDocTemplate* GetDocTemplate( ) const; // void CMy22View::OnViewInfomdiview() { CDocument* cd=GetDocument(); if (cd!=NULL) { CDocTemplate* cDoc=cd->GetDocTemplate(); if (cDoc!=NULL) { AfxMessageBox("Cool"); } else AfxMessageBox("Error Template"); } else AfxMessageBox("Error Document"); }
Ну, а получение CWinApp знакомое через AfxGetApp делали уже. Теперь мы можем создать схему обратного хода.
// CView GetDocument(); // CDocument GetDocTemplate() //CDocTempate AfxGetApp(); // с любого места программы
С этого момента Вы свободны и можете двигаться в любом направлении из любого класса схемы Документ-Вид, вызывать любые функции, синхронизировать разные документы и вообще творить много чего.