Когда пользователь выбирает из меню File строки New, вызывается виртуальный метод OnNewDocument, определенный в базовом классе CDocument. Если этот метод не переопределяется, то по умолчанию он вызывает метод DeleteContents и далее помечает документ как чистый (пустой).
Можно переопределить метод OnNewDocument в наследуемом классе документа, чтобы выполнить его инициализацию (инициализацию его переменных, выделение при необходимости памяти). При этом требуется из переопределенного метода OnNewDocument сначала вызвать метод OnNewDocument, определенный в базовом классе.
BOOL CDoc::OnNewDocument() { // Вызов метода базового класса if (!CDocument::OnNewDocument()) return FALSE;
// Подготовка документа – инициализацию его переменных, // выделение при необходимости памяти для хранения данных ………
return TRUE; }
Когда пользователь создает новый документ в приложении, построенном на основе однооконного интерфейса, то на самом деле используется старый документ. Новый объект класса, представляющего документ, не создается. Метод OnNewDocument должен удалить содержимое документа и выполнить повторную инициализацию существующего объекта класса документа.
Из этого следует, что нельзя выполнять инициализацию документа в конструкторе класса документа, так как конструктор будет вызван только один раз за время работы приложения. Более правильно использовать для цели метод OnNewDocument.
Если в наследуемом классе документа переопределить метод DeleteContents, то метод OnNewDocument базового класса CDocument, будет вызывать метод DeleteContents, определенный в наследуемом классе. Переопределенный метод DeleteContents обычно имеет следущий вид:
void CDoc::DeleteContents() { // Очистка документа – освобождение памяти, // выделенной для хранения данных ……
// Вызов метода базового класса CDocument::DeleteContents(); }
Теперь в приложении при выборе из меню File строки New содержимое окна просмотра и документа обновляется. Приложение готово, например, выводить на экран новое изображение, создаваемое пользователем.