Чтение онлайн

на главную - закладки

Жанры

Microsoft Visual C++ и MFC. Программирование для Windows 95 и Windows NT. Часть 2

Фролов Григорий Вячеславович

Шрифт:

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 {

Поделиться:
Популярные книги

Вечный. Книга VII

Рокотов Алексей
7. Вечный
Фантастика:
боевая фантастика
рпг
попаданцы
5.00
рейтинг книги
Вечный. Книга VII

Гримуар темного лорда II

Грехов Тимофей
2. Гримуар темного лорда
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Гримуар темного лорда II

Лейтенант. Назад в СССР. Книга 8. Часть 1

Гаусс Максим
8. Второй шанс
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Лейтенант. Назад в СССР. Книга 8. Часть 1

Менталист. Эмансипация

Еслер Андрей
1. Выиграть у времени
Фантастика:
альтернативная история
7.52
рейтинг книги
Менталист. Эмансипация

Точка Бифуркации IV

Смит Дейлор
4. ТБ
Фантастика:
героическая фантастика
городское фэнтези
попаданцы
5.00
рейтинг книги
Точка Бифуркации IV

Сфирот

Прокофьев Роман Юрьевич
8. Стеллар
Фантастика:
боевая фантастика
рпг
6.92
рейтинг книги
Сфирот

Шайтан Иван 4

Тен Эдуард
4. Шайтан Иван
Фантастика:
попаданцы
альтернативная история
8.00
рейтинг книги
Шайтан Иван 4

Запечатанный во тьме. Том 1. Тысячи лет кача

NikL
1. Хроники Арнея
Фантастика:
уся
эпическая фантастика
фэнтези
5.00
рейтинг книги
Запечатанный во тьме. Том 1. Тысячи лет кача

На границе империй. Том 9. Часть 2

INDIGO
15. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 9. Часть 2

Изгои

Владимиров Денис
5. Глэрд
Фантастика:
фэнтези
боевая фантастика
5.00
рейтинг книги
Изгои

Технарь

Муравьёв Константин Николаевич
1. Технарь
Фантастика:
космическая фантастика
попаданцы
7.13
рейтинг книги
Технарь

Чехов

Гоблин (MeXXanik)
1. Адвокат Чехов
Фантастика:
фэнтези
боевая фантастика
альтернативная история
5.00
рейтинг книги
Чехов

Полет аистов

Гранже Жан-Кристоф
Детективы:
триллеры
8.88
рейтинг книги
Полет аистов

Эпоха Опустошителя. Том VIII

Павлов Вел
8. Вечное Ристалище
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Эпоха Опустошителя. Том VIII