Программирование на языке MFC

Мой второй блог в серии программирования
03.02.2010

Строчку, которая нас интересует, мы найдем в файле afxwin.h. В описании класса CWinApp среди множества полей мы увидим:

CDocManager* m_pDocManager;

Значит, мы на правильном пути! Более того, это поле описа­но как общедоступное (public)! Но почему-то в MSDN я не нашел ни слова о классе CDocManager, за исключением нескольких упо­минаний в разделах периодики и Knowledge Base. Честно гово­ря, меня это несколько удивило. С одной стороны, член класса описан как доступный (public). А с другой, чтобы использовать его сначала нужно пролезть по исходникам MFC. Тем самым тех­нические писатели, готовившие описание MFC, разорвали связь между приложением и СИСТЕМОЙ используемых при работе архитектуры «документ/представление» классов. Но ничего не поделаешь. Из-за того, что в MSDN нет ни слова об объекте это­го класса, нам придется немного задержаться и взглянуть на описание этого объекта.

Сначала нам неплохо было бы получить хотя бы общее представ­ление о том, что представляет собой класс CDocManager. В описании класса CWinApp можно найти всего три метода, которые работают с этим полем. Этими методами являются AddDocTemplate(), Get-FirstDocTemplatePosition() и GetNextDocTemplate(). Их исходный код, который находится в файле appui2.cpp, приведен ниже:

void CWinApp::AddDocTemplate(CDocTemplate* pTemplate) {

if (m_pDocManager == NULL)

m_pDocManager = new CDocManager; m_pDocManager->AddDocTemplate(pTemplate) ;

}

POSITION CWinApp::GetFirstDocTemplatePosition() const {

if (m_pDocManager == NULL) return NULL;

return m_pDocManager->GetFirstDocTemplatePosition();

}

CDocTemplate* CWinApp::GetNextDocTemplate(POSITIONS

rPosition) const

{

ASSERT(m_pDocManager != NULL);

return m_pDocManager->GetNextDocTemplate(rPosition) ;

}

Судя по именам и исходному коду, эти методы предназначены для работы со списком каких-то шаблонов, не так ли? В таком слу­чае возможно, что в основе своей класс CDocManager является списком, не так ли?