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



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


extern СТгееАрр theApp; // Определен в другом месте

В файл реализации класса CTreeDoc вставьте тело функции MakeView, которое приведено ниже. В ней реализован доступ к приложению с помощью глобальной функции AfxGetApp, но вы можете опробовать и второй способ, заменив "рАрр->" на " theApp. " и учтя сказанное выше. При этом также отпадает необходимость в строке кода СТгееАрр* рАрр = (СТгееАрр*) Af xGetApp ();.

bool CTreeDoc::MakeView()

{

//==== Если недостает какого-либо из представлений

if (!m_bDrawExist !m_bTreeExist)

{

//====== Добываем адрес приложения

CTreeApp* pApp = (CTreeApp*) AfxGetApp ();

CDocTemplate *pTempl;

//====== Выбираем шаблон недостающего типа

if ( !m_bDrawExist)

{

pTempl = pApp->m_pTemplDraw;

m_bDrawExist = true;

}

else

{

pTempl = pApp->m_pTemplTree;

m_bTreeExist = true;

// Создаем окно документа

// Тип рамки и представления определяется шаблоном

CFrameWnd *pFrarae = pTempl->CreateNewFrame (this, 0) ; pTempl->InitialUpdateFrame (pFrarae, this) ;

return true;

}

return false;

}

Если вы хотите иметь современный и чуть более надежный код, то используйте вызов:

CTreeApp* pApp = dynamic_cast<CTreeApp*> (AfxGetApp ());

Всю работу по созданию окна-рамки и помещения в его клиентскую область выполняют методы CreateNewFrame И InitialUpdateFrame класса CDocTemplate, который является базовым для класса CMultiDocTemplate. Вы помните, что два объекта последнего класса мы создали в теле функции initlnstance для реализации MDI-функциональности по нашему сценарию. Сценарий еще пока не реализован. Введем изменения в метод OnNewDocument, для того чтобы правильно установить флаги существования окон:

BOOL CTreeDoc: : OnNewDocument ()

{

//====== При создании нового документа

if ( ICDocument: : OnNewDocument () )

return FALSE;

//====== Документ знает свой шаблон

CDocTemplate* pTempl = GetDocTemplate () ;

CString s;

//====== Выясняем его тип из строкового ресурса

pTempl->GetDocStrlng (s, CDocTemplate: : fileNewName) ;




Содержание  Назад  Вперед