IMPLEMENT_DYNCREATE(CChildFrame, CMDIChildWnd)
// Таблица сообщений
BEGIN_MESSAGE_MAP(CChildFrame, CMDIChildWnd)
//{{AFX_MSG_MAP(CChildFrame)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
Метод PreCreateWindow класса CChildFrame
Метод PreCreateWindow вызывается перед созданием дочернего окна MDI. Вы можете использовать его, чтобы переопределить стили этого окна:
BOOL CChildFrame::PreCreateWindow(CREATESTRUCT& cs) {
// TODO:
return CMDIChildWnd::PreCreateWindow(cs);
}
Методы AssertValid и Dump класса CChildFrame
Методы AssertValid и Dump переопределяются в классе CMainFrame только для отладочной версии приложения и используются при отладке приложения:
//////////////////////////////////////////////////////////////
// Диагностические методы класса CChildFrame
#ifdef _DEBUG
void CChildFrame::AssertValid() const {
CMDIChildWnd::AssertValid();
}
void CChildFrame::Dump(CDumpContext& dc) const {
CMDIChildWnd::Dump(dc);
}
Класс документа приложения
Класс документа приложения CMultiDoc наследуется от базового класса CDocument библиотеки MFC. Определение этого класса вы можете найти в файле MultiDoc.h. Мы привели структуру класса CMultiDoc на рисунке 1.12.
Рис. 1.12. Окно Project Workspace, класс CMultiDoc
MFC AppWizard определяет класс CMultiDoc одинаково для однооконных и для многооконных приложений. Единственное исключение составляет название класса документа, которое создается на основе имени проекта:
class CMultiDoc : public CDocument {
protected:
CMultiDoc();
DECLARE_DYNCREATE(CMultiDoc)
// Attributes
public:
// Operations
public:
// Overrides
//{{AFX_VIRTUAL(CMultiDoc)
public:
virtual BOOL OnNewDocument();
virtual void Serialize(CArchive& ar);
//}}AFX_VIRTUAL
// Implementation
public:
virtual ~CMultiDoc();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
protected:
protected:
//{{AFX_MSG(CMultiDoc)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
Конструктор и деструктор класса CMultiDoc
Конструктор и деструктор класса CMultiDoc не содержит программного кода. Вы можете добавить его по мере необходимости:
CMultiDoc::CMultiDoc() {
// TODO:
}
CMultiDoc::~CMultiDoc() {}
Таблица сообщений класса CMultiDoc
Таблица сообщений класса CMultiDoc не содержит ни одного обработчика сообщений:
// Объекты класса CMultiDoc могут создаваться динамически
IMPLEMENT_DYNCREATE(CMultiDoc, CDocument)
// Таблица сообщений класса CMultiDoc
BEGIN_MESSAGE_MAP(CMultiDoc, CDocument)
//{{AFX_MSG_MAP(CMultiDoc)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
Методы OnNewDocument и Serialize класса CMultiDoc
В классе CMultiDoc переопределены два виртуальных метода – OnNewDocument и Serialize. Виртуальный метод OnNewDocument определен в классе CDocument, от которого непосредственно наследуется класс CSingleDoc.
Метод OnNewDocument вызывается, когда надо создать новый документ для приложения. Для одноконных приложений метод OnNewDocument вызывался только один раз при запуске приложения.
Для многооконного приложения метод OnNewDocument вызывается каждый раз, когда пользователь создает новый документ. Более подробно об использовании метода OnNewDocument мы расскажем в следующих главах, когда к шаблону приложения, созданному MFC AppWizard, мы будем добавлять собственный код:
BOOL CMultiDoc::OnNewDocument() {
if (!CDocument::OnNewDocument()) return FALSE;
// TODO: Здесь можно выполнить инициализацию документа
return TRUE;
}
Метод Serialize вызывается в тех случаях, когда надо загрузить документ из файла на диске или наоборот, записать его в файл:
//////////////////////////////////////////////////////////////
// Метод Serialize класса CMultiDoc
void CMultiDoc::Serialize(CArchive& ar) {
if (ar.IsStoring()) {
// TODO:
} else {
// TODO:
}
}
Методы AssertValid и Dump класса CMultiDoc
Методы AssertValid и Dump переопределяются в классе CMainFrame только для отладочной версии приложения и используются при отладке приложения:
//////////////////////////////////////////////////////////////
// Диагностические методы класса CMultiDoc
#ifdef _DEBUG
void CMultiDoc::AssertValid() const {
CDocument::AssertValid();
}
void CMultiDoc::Dump(CDumpContext& dc) const {
CDocument::Dump(dc);
}
#endif //_DEBUG
Класс окна просмотра документа
Класс окна просмотра документа, также как класс документа и главный класс приложения, имеют своего двойника в однооконном приложении. Так, в приложении Single определен класс окна просмотра CSingleView, совпадающий с классом CMultiView.
Читать дальше