Учебник по Visual C++ .Net


Взаимодействие представлений документа


"RightView.h"

#include "DrawView.h"

Затем перейдем к реализации заявленного в классе документа метода Getview (поиск адреса нужного представления). Его параметром служит адрес статической структуры типа CRuntimeClass, которая присутствует во всех классах, произведенных от cob j ect. Она является общей для всех объектов одного и того же класса и содержит ряд полезных полей, в том числе и поле m_lpszClassName, которое позволяет узнать имя класса на этапе выполнения программы. Обычно для того, чтобы узнать, принадлежит ли объект (адрес структуры CRuntimeClass которого вы знаете) тому или иному классу, пользуются функцией isKindOf, унаследованной от CObject. Она, в свою очередь, для ответа на этот вопрос использует поле m_lpszClassName структуры CRuntimeClass:

CView* CTreeDoc::GetView(const CRuntimeClass* pClass)

{

// Становимся в начало списка представлений документ^

POSITION pos = GetFirstViewPosition();

//====== Пессимистический прогноз

CView *pView = 0;

//====== Цикл поиска нужного представления

while (pos)

{

pView = GetNextView(pos);

//=== Если нашли, то возвращаем адрес

if (pView->IsKindOf(pClass))

break;

}

//===== Возвращаем результат поиска return pView;

}

В процессе работы с MDI-приложением пользователь закрывает одни документы и открывает другие. Вновь открытый документ в начальный момент представлен одним из двух возможных типов окон: либо расщепленным окном типа CTreeFrame, которое содержит два окна CLef tview и CRightview, либо обычным MDI-child-окном типа CDrawFrame, которое содержит одно окно CDrawView. В ситуации, когда пользователь по картинке выбрал в правом окне один из документов, по сценарию необходимо создать новое окно типа CDrawFrame и в его клиентскую область поместить альтернативное представление (CDrawView) выбранного документа. Целесообразно реализовать и обратный сценарий, когда, имея окно типа CDrawView, пользователь хочет создать окно типа CTreeFrame, обрамляющего другие два представления документа.




Начало  Назад  Вперед