Виртуальный BOOL OnOpenDocument ( LPCTSTR lpszPathName );
Возвращаемое значение
Ненулевое значение, если документ был успешно загружен; в противном случае 0.
Параметры
lpszPathName
Указывает путь документа будет открыт.
Примечания
Вызывается в рамках как часть команды открыть файл. Реализация по умолчанию эта функция открывает указанный файл, вызывается функция-член DeleteContents для обеспечения документ пуст, вызывает CObject::Serialize для чтения содержимого этого файла и затем помечает этот документ как чистого. Переопределите эту функцию, если вы хотите использовать что-то за исключением архива механизм или файл. Например можно написать приложение, где документы представляют собой записи в базу данных, а не в отдельных файлах.
Если пользователь выбирает команду Открыть файл в приложении SDI, framework использует эту функцию для повторной инициализации существующих CDocument объекта, а не создавать новое. Если пользователь выбирает открытие файла в приложении MDI, платформа создает новый объект CDocument каждый раз и затем вызывает эту функцию для его инициализации. Необходимо поместить код инициализации в этой функции вместо того, чтобы в конструкторе для команды открыть файл эффективным в приложения SDI.
Пример
/ / Следующие примеры иллюстрируют альтернативные методы
/ / инициализации объекта документа.
/ / Метод 1: В приложении MDI, простой место для ведения / / инициализации в документе constructor.nbsp; Рамки / / всегда создает новый объект документа для новых файлов или открытия файла.
CMyDoc::CMyDoc()
{
/ / Выполняют инициализацию MDI документа здесь.
// ...
}
/ / Метод 2: В приложении MDI или SDI, делать все инициализации / / в переопределении On&NewDocument, если вы уверены, что
/ / инициализации фактически сохраняется после сохранения файла
/ / и полностью восстановленные после открытия файла через сериализации.
BOOL CMyDoc::OnNewDocument()
{
Если (!.CDocument::OnNewDocument())
вернуть значение FALSE;
/ / Выполняют инициализацию нового документа.
Возвращает значение TRUE;
}
/ / Метод 3: если инициализации вашего документа не является
/ / эффективно сохранена и восстановлена путем сериализации (во время сохранения файла
/ / и открытие файла), затем реализовать инициализации в сингл
/ / функции (с именем InitMyDocument в этом примере). Позвонить
/ / Общие функции инициализации из переопределения обеих
/ / OnNewDocument и OnOpenDocument.
BOOL CMyDoc::OnNewDocument()
{
Если (!.CDocument::OnNewDocument())
вернуть значение FALSE;
InitMyDocument(); / / вызова функции общей инициализации
/ / Если ваш новый объект документа требует дополнительной инициализации
/ / не обязательно при десериализации документа через открытый файл
/ / затем выполнить дополнительные инициализации здесь.
Возвращает значение TRUE;
}
Обзор CDocument |nbsp; Члены класса | Иерархическая схема
См. такжеnbsp;CDocument::DeleteContents, CDocument::OnCloseDocument, CDocument::On&NewDocument, CDocument::OnSaveDocument, CDocument::ReportSaveLoadException, CObject::Serialize