Иллюстрированный самоучитель по Visual Studio.Net

Смотрите здесь печать на сувенирной продукции. | декоративный пвх профиль | перевозка грузов турция | музыкальные поздравления подробностиздесь. | Обивка мебели на дому недорого частный мастер здесь еще больше. |

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


Вы помните, что в любой точке программы мы имеем право вызвать глобальную функцию MFC. Напомним, однако, что почти все глобальные объекты MFC имеют префикс Afx (Application frameworks) — каркас приложения. Среди них есть много действительно полезных функций. Посмотрите справку по индексу Af х, и вы увидите все множество. Традиционно, для того чтобы достать адрес объекта theApp класса приложения, пользуются функцией Af xGetApp. Существует и второй способ — непосредственно использовать глобально определенный объект theApp, но для этого необходимо в начало срр-файла, где предполагается его использовать, поместить строку, разрешающую проблему видимости объекта theApp:

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.


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