Класс CDocument
Предоставляет базовую функциональность для определяемых пользователем классов документа.
Синтаксис
class CDocument : public CCmdTarget
Участники
Открытые конструкторы
Имя | Описание |
---|---|
CDocument::CDocument |
Формирует объект CDocument . |
Открытые методы
Имя | Описание |
---|---|
CDocument::AddView |
Присоединяет представление к документу. |
CDocument::BeginReadChunks |
Инициализирует чтение фрагментов. |
CDocument::CanCloseFrame |
Расширенная переопределение; вызывается перед закрытием окна кадра, просматриваемого этим документом. |
CDocument::ClearChunkList |
Очищает список блоков. |
CDocument::ClearPathName |
Очищает путь к объекту документа. |
CDocument::DeleteContents |
Вызывается для очистки документа. |
CDocument::FindChunk |
Ищет блок с указанным GUID. |
CDocument::GetAdapter |
Возвращает указатель на объект, реализующий IDocument интерфейс. |
CDocument::GetDocTemplate |
Возвращает указатель на шаблон документа, описывающий тип документа. |
CDocument::GetFile |
Возвращает указатель на нужный CFile объект. |
CDocument::GetFirstViewPosition |
Возвращает позицию первого в списке представлений; используется для начала итерации. |
CDocument::GetNextView |
Выполняет итерацию по списку представлений, связанных с документом. |
CDocument::GetPathName |
Возвращает путь к файлу данных документа. |
CDocument::GetThumbnail |
Вызывается для создания растрового изображения, используемого поставщиком эскизов для отображения эскизов. |
CDocument::GetTitle |
Возвращает название документа. |
CDocument::InitializeSearchContent |
Вызывается для инициализации содержимого поиска для обработчика поиска. |
CDocument::IsModified |
Указывает, был ли документ изменен с момента последнего сохранения. |
CDocument::IsSearchAndOrganizeHandler |
Указывает, был ли создан этот экземпляр объекта для обработчика поиска и упорядочения CDocument . |
CDocument::LoadDocumentFromStream |
Вызывается для загрузки данных документа из потока. |
CDocument::OnBeforeRichPreviewFontChanged |
Вызывается до изменения шрифта Rich Preview. |
CDocument::OnChangedViewList |
Вызывается после добавления или удаления представления из документа. |
CDocument::OnCloseDocument |
Вызывается для закрытия документа. |
CDocument::OnCreatePreviewFrame |
Вызывается платформой, когда необходимо создать кадр предварительного просмотра для rich Preview. |
CDocument::OnDocumentEvent |
Вызывается платформой в ответ на событие документа. |
CDocument::OnDrawThumbnail |
Переопределите этот метод в производном классе для рисования содержимого эскиза. |
CDocument::OnLoadDocumentFromStream |
Вызывается платформой, когда необходимо загрузить данные документа из потока. |
CDocument::OnNewDocument |
Вызывается для создания нового документа. |
CDocument::OnOpenDocument |
Вызывается для открытия существующего документа. |
CDocument::OnPreviewHandlerQueryFocus |
Направляет обработчик предварительного GetFocus просмотра, чтобы вернуть вызов HWND функции. |
CDocument::OnPreviewHandlerTranslateAccelerator |
Направляет обработчик предварительного просмотра для обработки нажатия клавиш, передаваемого из насоса сообщений процесса, в котором выполняется обработчик предварительного просмотра. |
CDocument::OnRichPreviewBackColorChanged |
Вызывается при изменении цвета фона Rich Preview. |
CDocument::OnRichPreviewFontChanged |
Вызывается при изменении шрифта Rich Preview. |
CDocument::OnRichPreviewSiteChanged |
Вызывается при изменении сайта Rich Preview. |
CDocument::OnRichPreviewTextColorChanged |
Вызывается при изменении цвета текста с расширенным просмотром. |
CDocument::OnSaveDocument |
Вызывается для сохранения документа на диск. |
CDocument::OnUnloadHandler |
Вызывается платформой при выгрузке обработчика предварительной версии. |
CDocument::PreCloseFrame |
Вызывается до закрытия окна кадра. |
CDocument::ReadNextChunkValue |
Считывает следующее значение блока. |
CDocument::ReleaseFile |
Освобождает файл, чтобы сделать его доступным для использования другими приложениями. |
CDocument::RemoveChunk |
Удаляет блок с указанным GUID . |
CDocument::RemoveView |
Отсоединяет представление от документа. |
CDocument::ReportSaveLoadException |
Расширенная переопределение; вызывается, когда операция открытия или сохранения не может быть завершена из-за исключения. |
CDocument::SaveModified |
Расширенная переопределение; вызывается запрос пользователя о том, следует ли сохранить документ. |
CDocument::SetChunkValue |
Задает значение блока. |
CDocument::SetModifiedFlag |
Задает флаг, указывающий, что вы изменили документ с момента последнего сохранения. |
CDocument::SetPathName |
Задает путь к файлу данных, используемому документом. |
CDocument::SetTitle |
Задает заголовок документа. |
CDocument::UpdateAllViews |
Уведомляет обо всех представлениях, измененных документом. |
Защищенные методы
Имя | Описание |
---|---|
CDocument::OnFileSendMail |
Отправляет сообщение электронной почты с присоединенным документом. |
CDocument::OnUpdateFileSendMail |
Включает команду "Отправить почту", если в ней присутствует поддержка почты. |
Открытые члены данных
Имя | Описание |
---|---|
CDocument::m_bGetThumbnailMode |
Указывает, что CDocument объект был создан dllhost для эскизов. Должен быть возвращен CView::OnDraw . |
CDocument::m_bPreviewHandlerMode |
Указывает, что CDocument объект был создан prevhost для Rich Preview . Должен быть возвращен CView::OnDraw . |
CDocument::m_bSearchMode |
Указывает, что CDocument объект был создан индексатором или другим приложением поиска. |
CDocument::m_clrRichPreviewBackColor |
Задает цвет фона окна "Расширенный просмотр". Этот цвет задается узлом. |
CDocument::m_clrRichPreviewTextColor |
Задает цвет переднего плана окна "Расширенный просмотр". Этот цвет задается узлом. |
CDocument::m_lfRichPreviewFont |
Задает текстовый шрифт для окна Rich Preview. Эти сведения о шрифте задаются узлом. |
Замечания
Документ представляет единицу данных, которые пользователь обычно открывает с помощью команды "Открыть файл" и сохраняется с помощью команды "Сохранить файл".
CDocument
поддерживает стандартные операции, такие как создание документа, его загрузка и сохранение. Платформа управляет документами с помощью интерфейса, определенного .CDocument
Приложение может поддерживать несколько типов документов; Например, приложение может поддерживать как электронные таблицы, так и текстовые документы. Каждый тип документа имеет связанный шаблон документа; Шаблон документа указывает, какие ресурсы (например, меню, значок или таблицу акселератора) используются для этого типа документа. Каждый документ содержит указатель на связанный CDocTemplate
объект.
Пользователи взаимодействуют с документом через CView
связанные с ним объекты. Представление отображает изображение документа в окне фрейма и интерпретирует входные данные пользователя как операции с документом. Документ может иметь несколько представлений, связанных с ним. Когда пользователь открывает окно в документе, платформа создает представление и присоединяет его к документу. Шаблон документа определяет тип окна представления и фрейма для отображения каждого типа документа.
Документы являются частью стандартной маршрутизации команд платформы и, следовательно, получают команды из стандартных компонентов пользовательского интерфейса (например, пункт меню "Сохранить файл"). Документ получает команды, пересылаемые активным представлением. Если документ не обрабатывает указанную команду, он перенаправит команду в шаблон документа, который управляет им.
При изменении данных документа каждое из его представлений должно отражать эти изменения. CDocument
UpdateAllViews
предоставляет функцию-член для уведомления о таких изменениях, чтобы представления могли перенакрасить себя по мере необходимости. Платформа также предложит пользователю сохранить измененный файл перед закрытием файла.
Чтобы реализовать документы в обычном приложении, необходимо выполнить следующие действия.
Производный класс от
CDocument
каждого типа документа.Добавьте переменные-члены для хранения данных каждого документа.
Реализуйте функции-члены для чтения и изменения данных документа. Представления документа являются наиболее важными пользователями этих функций-членов.
Переопределите
CObject::Serialize
функцию-член в классе документов, чтобы записывать и считывать данные документа на диск и с диска.
CDocument
поддерживает отправку документа по почте, если присутствует поддержка почты (MAPI). См. статьи MAPI и MAPI Support in MFC.
Дополнительные сведения см. в CDocument
разделах по сериализации, архитектуре документа и представления архитектуры и создании документов и представлений.
Иерархия наследования
CDocument
Требования
Заголовок: afxwin.h
CDocument::AddView
Вызовите эту функцию для присоединения представления к документу.
void AddView(CView* pView);
Параметры
pView
Указывает на добавляемое представление.
Замечания
Эта функция добавляет указанное представление в список представлений, связанных с документом; Функция также задает указатель документа представления на этот документ. Платформа вызывает эту функцию при присоединении только что созданного объекта представления к документу; это происходит в ответ на команду "Создать файл", "Открыть файл" или "Создать окно" или при разделении окна разделения.
Вызовите эту функцию только в том случае, если вы создаете и присоединяете представление вручную. Как правило, платформа позволяет подключать документы и представления, определяя CDocTemplate
объект для связывания класса документа, класса представления и класса окна кадра.
Пример
// The following example toggles two views in an SDI (single document
// interface) frame window. A design decision must be made as to
// whether to leave the inactive view connected to the document,
// such that the inactive view continues to receive OnUpdate
// notifications from the document. It is usually desirable to
// keep the inactive view continuously in sync with the document, even
// though it is inactive. However, doing so incurs a performance cost,
// as well as the programming cost of implementing OnUpdate hints.
// It may be less expensive, in terms of performance and/or programming,
// to re-sync the inactive view with the document only with it is
// reactivated. This example illustrates this latter approach, by
// reconnecting the newly active view and disconnecting the newly
// inactive view, via calls to CDocument::AddView and RemoveView.
void CMainFrame::OnViewChange(UINT nCmdID)
// There is an ON_COMMAND_RANGE message map entry associated with
// OnViewChange:
// ON_COMMAND_RANGE(ID_VIEW_CHANGE1, ID_VIEW_CHANGE2, &OnViewChange)
{
CView *pViewAdd;
CView *pViewRemove;
CDocument *pDoc = GetActiveDocument();
// cvView1 and cvView2 are enum members defined in my CMainFrame class
if ((nCmdID == ID_VIEW_CHANGE1) && (m_currentView == cvView1))
return;
if ((nCmdID == ID_VIEW_CHANGE2) && (m_currentView == cvView2))
return;
if (nCmdID == ID_VIEW_CHANGE2)
{
if (m_pView2 == NULL)
{
m_pView1 = GetActiveView();
m_pView2 = new CMyView2;
//Note that if OnSize has been overridden in CMyView2
//and GetDocument() is used in this override it can
//cause assertions and, if the assertions are ignored,
//cause access violation.
m_pView2->Create(NULL, NULL, AFX_WS_DEFAULT_VIEW, rectDefault, this,
AFX_IDW_PANE_FIRST + 1, NULL);
}
pViewAdd = m_pView2;
pViewRemove = m_pView1;
m_currentView = cvView2;
}
else
{
pViewAdd = m_pView1;
pViewRemove = m_pView2;
m_currentView = cvView1;
}
// Set the child i.d. of the active view to AFX_IDW_PANE_FIRST,
// so that CFrameWnd::RecalcLayout will allocate to this
// "first pane" that portion of the frame window's client area
// not allocated to control bars. Set the child i.d. of the
// other view to anything other than AFX_IDW_PANE_FIRST; this
// examples switches the child id's of the two views.
int nSwitchChildID = pViewAdd->GetDlgCtrlID();
pViewAdd->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
pViewRemove->SetDlgCtrlID(nSwitchChildID);
// Show the newly active view and hide the inactive view.
pViewAdd->ShowWindow(SW_SHOW);
pViewRemove->ShowWindow(SW_HIDE);
// Connect the newly active view to the document, and
// disconnect the inactive view.
pDoc->AddView(pViewAdd);
pDoc->RemoveView(pViewRemove);
SetActiveView(pViewAdd);
RecalcLayout();
}
CDocument::BeginReadChunks
Инициализирует чтение фрагментов.
virtual void BeginReadChunks ();
Замечания
CDocument::CanCloseFrame
Вызывается платформой до закрытия окна кадра, отображающего документ.
virtual BOOL CanCloseFrame(CFrameWnd* pFrame);
Параметры
pFrame
Указывает на окно фрейма представления, присоединенного к документу.
Возвращаемое значение
Ненулевое значение, если оно безопасно закрыть окно фрейма; в противном случае — 0.
Замечания
Реализация по умолчанию проверяет наличие других окон фрейма, отображающих документ. Если указанное окно кадра является последним, отображающим документ, функция предложит пользователю сохранить документ, если он был изменен. Переопределите эту функцию, если вы хотите выполнить специальную обработку при закрытии окна кадра. Это расширенная переопределение.
CDocument::CDocument
Формирует объект CDocument
.
CDocument();
Замечания
Платформа обрабатывает создание документа для вас. Переопределите OnNewDocument
функцию-член для выполнения инициализации на основе каждого документа. Это особенно важно в приложениях единого интерфейса документов (SDI).
CDocument::ClearChunkList
Очищает список блоков.
virtual void ClearChunkList ();
Замечания
CDocument::ClearPathName
Очищает путь к объекту документа.
virtual void ClearPathName();
Замечания
Очистка пути от CDocument
объекта приводит к тому, что приложение предложит пользователю при следующем сохранении документа. Это делает команду "Сохранить как", как команда "Сохранить как".
CDocument::DeleteContents
Вызывается платформой для удаления данных документа без уничтожения CDocument
самого объекта.
virtual void DeleteContents();
Замечания
Он вызывается непосредственно перед уничтожением документа. Он также вызывается, чтобы убедиться, что документ пуст перед повторной использованием. Это особенно важно для приложения SDI, использующего только один документ; Документ повторно используется всякий раз, когда пользователь создает или открывает другой документ. Вызовите эту функцию для реализации команды Edit Clear All или аналогичной команды, которая удаляет все данные документа. Реализация по умолчанию этой функции не выполняет никаких действий. Переопределите эту функцию, чтобы удалить данные в документе.
Пример
// This example is the handler for an Edit Clear All command.
void CExampleDoc::OnEditClearAll()
{
DeleteContents();
UpdateAllViews(NULL);
}
void CExampleDoc::DeleteContents()
{
// Re-initialize document data here.
}
CDocument::FindChunk
Ищет блок с указанным GUID.
virtual POSITION FindChunk(
REFCLSID guid,
DWORD pid);
Параметры
guid
Указывает GUID блока для поиска.
pid
Указывает идентификатор идентификатора блока для поиска.
Возвращаемое значение
При успешном выполнении позиции в списке внутренних блоков. В противном случае — значение NULL
.
Замечания
CDocument::GetAdapter
Возвращает указатель на объект, реализующий IDocument
интерфейс.
virtual ATL::IDocument* GetAdapter();
Возвращаемое значение
Указатель на объект, реализующий IDocument
интерфейс.
Замечания
CDocument::GetDocTemplate
Вызовите эту функцию, чтобы получить указатель на шаблон документа для этого типа документа.
CDocTemplate* GetDocTemplate() const;
Возвращаемое значение
Указатель на шаблон документа для этого типа документа или NULL, если документ не управляется шаблоном документа.
Пример
// This example accesses the doc template object to construct
// a default document name such as SHEET.XLS, where "sheet"
// is the base document name and ".xls" is the file extension
// for the document type.
CString strDefaultDocName, strBaseName, strExt;
CDocTemplate *pDocTemplate = GetDocTemplate();
if (!pDocTemplate->GetDocString(strBaseName, CDocTemplate::docName) || !pDocTemplate->GetDocString(strExt, CDocTemplate::filterExt))
{
AfxThrowUserException(); // These doc template strings will
// be available if you created the application using AppWizard
// and specified the file extension as an option for
// the document class produced by AppWizard.
}
strDefaultDocName = strBaseName + strExt;
CDocument::GetFile
Вызовите эту функцию-член, чтобы получить указатель на CFile
объект.
virtual CFile* GetFile(
LPCTSTR lpszFileName,
UINT nOpenFlags,
CFileException* pError);
Параметры
lpszFileName
Строка, которая представляет собой путь к нужному файлу. Путь может быть относительным или абсолютным.
pError
Указатель на существующий объект исключения файла, указывающий состояние завершения операции.
nOpenFlags
Режим общего доступа и общего доступа. Указывает действие, которое необходимо предпринять при открытии файла. Параметры, перечисленные в конструкторе CFile::CFile
CFile, можно объединить с помощью побитового оператора OR (|
). Требуется одно разрешение на доступ и один вариант общего доступа; Режимы modeCreate
и modeNoInherit
режимы являются необязательными.
Возвращаемое значение
Указатель на объект CFile
.
CDocument::GetFirstViewPosition
Вызовите эту функцию, чтобы получить позицию первого представления в списке представлений, связанных с документом.
virtual POSITION GetFirstViewPosition() const;
Возвращаемое значение
POSITION
Значение, которое можно использовать для итерации с GetNextView
функцией-членом.
Пример
//To get the first view in the list of views:
//To get the first view in the list of views:
// POSITION pos = GetFirstViewPosition();
// CView* pFirstView = GetNextView(pos);
//
// This example uses CDocument::GetFirstViewPosition
// and GetNextView to repaint each view.
// An easier way to accomplish the same result is to call
// UpdateAllViews(NULL);
void CExampleDoc::OnRepaintAllViews()
{
POSITION pos = GetFirstViewPosition();
while (pos != NULL)
{
CView *pView = GetNextView(pos);
pView->UpdateWindow();
}
}
CDocument::GetNextView
Вызовите эту функцию для итерации всех представлений документа.
virtual CView* GetNextView(POSITION& rPosition) const;
Параметры
rPosition
Ссылка на POSITION
значение, возвращаемое предыдущим вызовом GetNextView
функций или GetFirstViewPosition
членов. Это значение не должно быть NULL
.
Возвращаемое значение
Указатель на представление, определяемое по rPosition
.
Замечания
Функция возвращает представление, rPosition
определенное и затем задает rPosition
POSITION
значение следующего представления в списке. Если полученное представление является последним в списке, rPosition
то задается значение NULL
.
Пример
//To get the first view in the list of views:
//To get the first view in the list of views:
// POSITION pos = GetFirstViewPosition();
// CView* pFirstView = GetNextView(pos);
//
// This example uses CDocument::GetFirstViewPosition
// and GetNextView to repaint each view.
// An easier way to accomplish the same result is to call
// UpdateAllViews(NULL);
void CExampleDoc::OnRepaintAllViews()
{
POSITION pos = GetFirstViewPosition();
while (pos != NULL)
{
CView *pView = GetNextView(pos);
pView->UpdateWindow();
}
}
CDocument::GetPathName
Вызовите эту функцию, чтобы получить полный путь к файлу диска документа.
const CString& GetPathName() const;
Возвращаемое значение
Полный путь документа. Эта строка пуста, если документ не был сохранен или не связан с ним файл диска.
CDocument::GetThumbnail
Создает растровое изображение, которое будет использоваться поставщиком эскизов для отображения эскиза.
virtual BOOL GetThumbnail(
UINT cx,
HBITMAP* phbmp,
DWORD* pdwAlpha);
Параметры
cx
Задает ширину и высоту растрового изображения.
phbmp
Содержит дескриптор растрового изображения, когда функция возвращается успешно.
pdwAlpha
Содержит DWORD
значение альфа-канала, когда функция возвращается успешно.
Возвращаемое значение
Возвращает, TRUE
если растровое изображение для эскиза было создано успешно; в противном случае FALSE
.
Замечания
CDocument::GetTitle
Вызовите эту функцию, чтобы получить заголовок документа, который обычно является производным от имени файла документа.
const CString& GetTitle() const;
Возвращаемое значение
Заголовок документа.
CDocument::InitializeSearchContent
Вызывается для инициализации содержимого поиска для обработчика поиска.
virtual void InitializeSearchContent ();
Замечания
Переопределите этот метод в производном классе, чтобы инициализировать содержимое поиска. Содержимое должно быть строкой с разделителями ";". Например, "point; прямоугольник; ole item".
CDocument::IsModified
Вызовите эту функцию, чтобы определить, был ли документ изменен с момента последнего сохранения.
virtual BOOL IsModified();
Возвращаемое значение
Ненулевое значение, если документ был изменен с момента последнего сохранения; в противном случае — 0.
CDocument::IsSearchAndOrganizeHandler
Указывает, был ли создан этот экземпляр для обработчика CDocument
поиска и упорядочения.
BOOL IsSearchAndOrganizeHandler() const;
Возвращаемое значение
Возвращает, TRUE
если этот экземпляр был создан для обработчика CDocument
поиска и организации.
Замечания
В настоящее время эта функция возвращает TRUE
только для обработчиков Rich Preview, реализованных на сервере обработки. Вы можете задать соответствующие флаги (m_bPreviewHandlerMode
, m_bSearchMode
, m_bGetThumbnailMode
) на уровне приложения, чтобы вернуть TRUE
эту функцию.
CDocument::LoadDocumentFromStream
Вызывается для загрузки данных документа из потока.
virtual HRESULT LoadDocumentFromStream(
IStream* pStream,
DWORD dwGrfMode);
Параметры
pStream
Указатель на поток. Этот поток предоставляется оболочкой.
dwGrfMode
Режим доступа к потоку.
Возвращаемое значение
S_OK
Значение , если операция загрузки выполнена успешно, в противном случае HRESULT
с кодом ошибки.
Замечания
Этот метод можно переопределить в производном классе, чтобы настроить загрузку данных из потока.
CDocument::m_bGetThumbnailMode
Указывает, что CDocument
объект был создан dllhost для эскизов. Должен быть возвращен CView::OnDraw
.
BOOL m_bGetThumbnailMode;
Замечания
TRUE
указывает, что документ был создан dllhost для эскизов.
CDocument::m_bPreviewHandlerMode
Указывает, что CDocument
объект был создан prevhost для Rich Preview. Должен быть возвращен CView::OnDraw
.
BOOL m_bPreviewHandlerMode;
Замечания
TRUE
указывает, что документ был создан prevhost для rich Preview.
CDocument::m_bSearchMode
Указывает, что CDocument
объект был создан индексатором или другим приложением поиска.
BOOL m_bSearchMode;
Замечания
TRUE
указывает, что документ был создан индексатором или другим приложением поиска.
CDocument::m_clrRichPreviewBackColor
Задает цвет фона окна "Расширенный просмотр". Этот цвет задается узлом.
COLORREF m_clrRichPreviewBackColor;
Замечания
CDocument::m_clrRichPreviewTextColor
Задает цвет переднего плана окна "Расширенный просмотр". Этот цвет задается узлом.
COLORREF m_clrRichPreviewTextColor;
Замечания
CDocument::m_lfRichPreviewFont
Задает текстовый шрифт для окна "Форматированный просмотр". Эти сведения о шрифте задаются узлом.
CFont m_lfRichPreviewFont;
Замечания
CDocument::OnBeforeRichPreviewFontChanged
Вызывается до изменения шрифта Rich Preview.
virtual void OnBeforeRichPreviewFontChanged();
Замечания
CDocument::OnChangedViewList
Вызывается платформой после добавления или удаления представления из документа.
virtual void OnChangedViewList();
Замечания
Реализация этой функции по умолчанию проверяет, удаляется ли последнее представление и, если да, удаляет документ. Переопределите эту функцию, если вы хотите выполнить специальную обработку при добавлении или удалении представления платформы. Например, если требуется, чтобы документ оставался открытым, даже если к нему нет вложенных представлений, переопределите эту функцию.
CDocument::OnCloseDocument
Вызывается платформой при закрытии документа, обычно в рамках команды "Закрыть файл".
virtual void OnCloseDocument();
Замечания
Реализация этой функции по умолчанию уничтожает все кадры, используемые для просмотра документа, закрывает представление, очищает содержимое документа, а затем вызывает DeleteContents
функцию-член для удаления данных документа.
Переопределите эту функцию, если вы хотите выполнить специальную обработку очистки при закрытии документа. Например, если документ представляет запись в базе данных, может потребоваться переопределить эту функцию, чтобы закрыть базу данных. Вы должны вызвать версию базового класса этой функции из переопределения.
CDocument::OnCreatePreviewFrame
Вызывается платформой, когда необходимо создать кадр предварительного просмотра для rich Preview.
virtual BOOL OnCreatePreviewFrame();
Возвращаемое значение
Возвращает, TRUE
если кадр создан успешно; в противном случае FALSE
.
Замечания
CDocument::OnDocumentEvent
Вызывается платформой в ответ на событие документа.
virtual void OnDocumentEvent(DocumentEvent deEvent);
Параметры
deEvent
[in] Перечислимый тип данных, описывающий тип события.
Замечания
События документа могут повлиять на несколько классов. Этот метод отвечает за обработку событий документов, влияющих на классы, отличные CDocument
от класса. В настоящее время единственным классом, который должен отвечать на события документа, является CDataRecoveryHandler
класс. Класс CDocument
имеет другие переопределимые методы, ответственные за обработку воздействия на него CDocument
.
В следующей таблице перечислены возможные значения и deEvent
соответствующие событиям.
Значение | Соответствующее событие |
---|---|
onAfterNewDocument |
Был создан новый документ. |
onAfterOpenDocument |
Был открыт новый документ. |
onAfterSaveDocument |
Документ сохранен. |
onAfterCloseDocument |
Документ был закрыт. |
CDocument::OnDrawThumbnail
Переопределите этот метод в производном классе, чтобы нарисовать эскиз.
virtual void OnDrawThumbnail(
CDC& dc,
LPRECT lprcBounds);
Параметры
dc
Ссылка на контекст устройства.
lprcBounds
Задает ограничивающий прямоугольник области, в которой должен быть нарисован эскиз.
Замечания
CDocument::OnFileSendMail
Отправляет сообщение через узел почтовой почты резидента (если таковой) с документом в виде вложения.
void OnFileSendMail();
Замечания
OnFileSendMail
вызовы OnSaveDocument
сериализации (сохранения) неуправляемых и измененных документов во временный файл, который затем отправляется через электронную почту. Если документ не был изменен, временный файл не нужен; Исходный отправляется. OnFileSendMail
загружает MAPI32.DLL, если он еще не загружен.
Специальная реализация для COleDocument
правильной OnFileSendMail
обработки составных файлов.
CDocument
поддерживает отправку документа по почте, если присутствует поддержка почты (MAPI). См. статьи MAPI темы и поддержка MAPI в MFC.
CDocument::OnLoadDocumentFromStream
Вызывается платформой, когда необходимо загрузить данные документа из потока.
virtual HRESULT OnLoadDocumentFromStream(
IStream* pStream,
DWORD grfMode);
Параметры
pStream
Указатель на входящий поток.
grfMode
Режим доступа к потоку.
Возвращаемое значение
S_OK
Значение , если загрузка выполнена успешно; в противном случае код ошибки.
Замечания
CDocument::OnNewDocument
Вызывается платформой в рамках команды "Создать файл".
virtual BOOL OnNewDocument();
Возвращаемое значение
Ненулевое значение, если документ был успешно инициализирован; в противном случае — 0.
Замечания
Реализация этой функции по умолчанию вызывает DeleteContents
функцию-член, чтобы убедиться, что документ пуст, а затем помечает новый документ как чистый. Переопределите эту функцию, чтобы инициализировать структуру данных для нового документа. Вы должны вызвать версию базового класса этой функции из переопределения.
Если пользователь выбирает команду "Создать файл" в приложении SDI, платформа использует эту функцию для повторной инициализации существующего документа, а не для создания нового. Если пользователь выбирает "Создать файл" в приложении с несколькими интерфейсами документов (MDI), платформа создает новый документ каждый раз, а затем вызывает эту функцию для инициализации. Код инициализации необходимо поместить в эту функцию вместо конструктора, чтобы команда File New была эффективной в приложениях SDI.
Обратите внимание, что есть случаи, когда OnNewDocument
вызывается дважды. Это происходит при внедрении документа в качестве сервера документов ActiveX. Функция сначала вызывается методом CreateInstance
(предоставляемым COleObjectFactory
производным классом) и вторым методом InitNew
(предоставляемым COleServerDoc
производным классом).
Пример
В следующих примерах показаны альтернативные методы инициализации объекта документа.
// Method 1: In an MDI application, the simplest place to do
// initialization is in the document constructor. The framework
// always creates a new document object for File New or File Open.
CExampleDoc::CExampleDoc()
{
// Do initialization of MDI document here.
}
// Method 2: In an SDI or MDI application, do all initialization
// in an override of OnNewDocument, if you are certain that
// the initialization is effectively saved upon File Save
// and fully restored upon File Open, via serialization.
BOOL CMyDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
{
return FALSE;
}
// Do initialization of new document here.
return TRUE;
}
// Method 3: If the initialization of your document is not
// effectively saved and restored by serialization (during File Save
// and File Open), then implement the initialization in single
// function (named InitMyDocument in this example). Call the
// shared initialization function from overrides of both
// OnNewDocument and OnOpenDocument.
BOOL CExampleDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
{
return FALSE;
}
InitMyDocument(); // call your shared initialization function
// If your new document object requires additional initialization
// not necessary when the document is deserialized via File Open,
// then perform that additional initialization here.
return TRUE;
}
CDocument::OnOpenDocument
Вызывается платформой в рамках команды "Открыть файл".
virtual BOOL OnOpenDocument(LPCTSTR lpszPathName);
Параметры
lpszPathName
Указывает путь к открытому документу.
Возвращаемое значение
Ненулевое значение, если документ был успешно загружен; в противном случае — 0.
Замечания
Реализация этой функции по умолчанию открывает указанный файл, вызывает DeleteContents
функцию-член, чтобы убедиться, что документ пуст, вызывает CObject::Serialize
чтение содержимого файла, а затем помечает документ как чистый. Переопределите эту функцию, если вы хотите использовать что-то другое, отличное от механизма архива или механизма файлов. Например, можно написать приложение, в котором документы представляют записи в базе данных, а не отдельные файлы.
Если пользователь выбирает команду "Открыть файл" в приложении SDI, платформа использует эту функцию для повторной инициализации существующего CDocument
объекта, а не создания нового. Если пользователь выбирает "Открыть файл" в приложении MDI, платформа создает новый CDocument
объект каждый раз, а затем вызывает эту функцию для инициализации. Код инициализации необходимо поместить в эту функцию вместо конструктора, чтобы команда File Open была эффективной в приложениях SDI.
Пример
В следующих примерах показаны альтернативные методы инициализации объекта документа.
// Method 1: In an MDI application, the simplest place to do
// initialization is in the document constructor. The framework
// always creates a new document object for File New or File Open.
CExampleDoc::CExampleDoc()
{
// Do initialization of MDI document here.
}
// Method 2: In an SDI or MDI application, do all initialization
// in an override of OnNewDocument, if you are certain that
// the initialization is effectively saved upon File Save
// and fully restored upon File Open, via serialization.
BOOL CMyDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
{
return FALSE;
}
// Do initialization of new document here.
return TRUE;
}
// Method 3: If the initialization of your document is not
// effectively saved and restored by serialization (during File Save
// and File Open), then implement the initialization in single
// function (named InitMyDocument in this example). Call the
// shared initialization function from overrides of both
// OnNewDocument and OnOpenDocument.
BOOL CExampleDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
{
return FALSE;
}
InitMyDocument(); // call your shared initialization function
// If your new document object requires additional initialization
// not necessary when the document is deserialized via File Open,
// then perform that additional initialization here.
return TRUE;
}
// Additional example of OnOpenDocument()
BOOL CExampleDoc::OnOpenDocument(LPCTSTR lpszPathName)
{
if (!CDocument::OnOpenDocument(lpszPathName))
{
return FALSE;
}
InitMyDocument(); // call your shared initialization function
return TRUE;
}
CDocument::OnPreviewHandlerQueryFocus
Направляет обработчик предварительного GetFocus
просмотра для возврата полученного HWND
из вызова функции.
virtual HRESULT OnPreviewHandlerQueryFocus(HWND* phwnd);
Параметры
phwnd
[out] Когда этот метод возвращается, содержит указатель на HWND, возвращенный вызовом функции из GetFocus
потока переднего плана обработчика предварительного просмотра.
Возвращаемое значение
Возвращает значение S_OK
, если успешно; или значение ошибки в противном случае.
Замечания
CDocument::OnPreviewHandlerTranslateAccelerator
Направляет обработчик предварительного просмотра для обработки нажатия клавиш, передаваемого из насоса сообщений процесса, в котором выполняется обработчик предварительного просмотра.
virtual HRESULT OnPreviewHandlerTranslateAccelerator(MSG* pmsg);
Параметры
pmsg
[in] Указатель на сообщение окна.
Возвращаемое значение
Если сообщение нажатия клавиш может обрабатываться обработчиком предварительной версии, обработчик обрабатывает его и возвращает S_OK
. Если обработчик предварительной версии не может обработать сообщение нажатия клавиш, он предлагает его узлу через IPreviewHandlerFrame::TranslateAccelerator
. Если узел обрабатывает сообщение, этот метод возвращается S_OK
. Если узел не обрабатывает сообщение, этот метод возвращается S_FALSE
.
Замечания
CDocument::OnRichPreviewBackColorChanged
Вызывается при изменении цвета фона rich Preview.
virtual void OnRichPreviewBackColorChanged();
Замечания
CDocument::OnRichPreviewFontChanged
Вызывается при изменении шрифта Rich Preview.
virtual void OnRichPreviewFontChanged();
Замечания
CDocument::OnRichPreviewSiteChanged
Вызывается при изменении сайта Rich Preview.
virtual void OnRichPreviewSiteChanged();
Замечания
CDocument::OnRichPreviewTextColorChanged
Вызывается при изменении цвета текста форматированного просмотра.
virtual void OnRichPreviewTextColorChanged();
Замечания
CDocument::OnSaveDocument
Вызывается платформой в рамках команды "Сохранить файл" или "Сохранить файл как".
virtual BOOL OnSaveDocument(LPCTSTR lpszPathName);
Параметры
lpszPathName
Указывает на полный путь, к которому следует сохранить файл.
Возвращаемое значение
Ненулевое значение, если документ был успешно сохранен; в противном случае — 0.
Замечания
Реализация этой функции по умолчанию открывает указанный файл, вызывает CObject::Serialize
запись данных документа в файл, а затем помечает документ как чистый. Переопределите эту функцию, если вы хотите выполнить специальную обработку при сохранении документа. Например, можно написать приложение, в котором документы представляют записи в базе данных, а не отдельные файлы.
CDocument::OnUnloadHandler
Вызывается платформой при выгрузке обработчика предварительной версии.
virtual void OnUnloadHandler();
Замечания
CDocument::OnUpdateFileSendMail
Включает команду, ID_FILE_SEND_MAIL
если присутствует поддержка почты (MAPI).
void OnUpdateFileSendMail(CCmdUI* pCmdUI);
Параметры
pCmdUI
Указатель на объект, связанный CCmdUI
с командой ID_FILE_SEND_MAIL
.
Замечания
В противном случае функция удаляет ID_FILE_SEND_MAIL
команду из меню, включая разделители выше или под элементом меню соответствующим образом. MAPI включен, если MAPI32.DLL
он присутствует в пути и в разделе WIN.INI
[Почта] файла MAPI=1. Большинство приложений помещают эту команду в меню "Файл".
CDocument
поддерживает отправку документа по почте, если присутствует поддержка почты (MAPI). См. статьи MAPI темы и поддержка MAPI в MFC.
CDocument::PreCloseFrame
Эта функция-член вызывается платформой до уничтожения окна кадра.
virtual void PreCloseFrame(CFrameWnd* pFrame);
Параметры
pFrame
Указатель на CFrameWnd
связанный CDocument
объект.
Замечания
Его можно переопределить, чтобы обеспечить настраиваемую очистку, но не забудьте вызвать базовый класс.
Значение по умолчанию PreCloseFrame
ничего не делает в CDocument
. Производные CDocument
классы COleDocument
и CRichEditDoc
используют эту функцию-член.
CDocument::ReadNextChunkValue
Считывает следующее значение блока.
virtual BOOL ReadNextChunkValue(IFilterChunkValue** ppValue);
Параметры
ppValue
[out] Когда функция возвращается, ppValue
содержит значение, которое было прочитано.
Возвращаемое значение
Имеет ненулевое значение в случае успешного выполнения, иначе — 0.
Замечания
CDocument::ReleaseFile
Эта функция-член вызывается платформой для выпуска файла, что делает его доступным для использования другими приложениями.
virtual void ReleaseFile(
CFile* pFile,
BOOL bAbort);
Параметры
pFile
Указатель на освобожденный CFile
объект.
bAbort
Указывает, следует ли освободить файл с помощью одного CFile::Close
или.CFile::Abort
FALSE
Значение , если файл должен быть выпущен CFile::Close
TRUE
с помощьюCFile::Abort
.
Замечания
Если bAbort
имеет значение TRUE
, ReleaseFile
вызывается CFile::Abort
и файл освобождается. CFile::Abort
не будет вызывать исключение.
Если bAbort
имеет значение FALSE
, ReleaseFile
вызовы CFile::Close
и выпуск файла.
Переопределите эту функцию-член, чтобы потребовать действия пользователя перед освобождением файла.
CDocument::RemoveChunk
Удаляет блок с указанным GUID
.
virtual void RemoveChunk(
REFCLSID guid,
DWORD pid);
Параметры
Guid
Указывает GUID
фрагмент, который нужно удалить.
Pid
Указывает PID
фрагмент, который нужно удалить.
Замечания
CDocument::RemoveView
Вызовите эту функцию, чтобы отключить представление от документа.
void RemoveView(CView* pView);
Параметры
pView
Указывает на удаленное представление.
Замечания
Эта функция удаляет указанное представление из списка представлений, связанных с документом; Он также задает указатель NULL
документа представления на . Эта функция вызывается платформой при закрытии окна фрейма или закрыта панель окна разбиения.
Вызовите эту функцию, только если вы вручную отсоединяете представление. Как правило, вы позволите платформе отсоединять документы и представления, определив CDocTemplate
объект для связывания класса документа, класса представления и класса окна кадра.
Пример реализации см. в примере AddView
.
CDocument::ReportSaveLoadException
Вызывается, если исключение создается (обычно или CFileException
CArchiveException
) при сохранении или загрузке документа.
virtual void ReportSaveLoadException(
LPCTSTR lpszPathName,
CException* e,
BOOL bSaving,
UINT nIDPDefault);
Параметры
lpszPathName
Указывает на имя документа, сохраненного или загруженного.
e
Указывает на исключение, которое было создано. Может иметь значение NULL
.
bSaving
Флаг, указывающий на ход выполнения операции; значение nonzero, если документ сохраняется, 0, если документ загружается.
nIDPDefault
Идентификатор сообщения об ошибке, отображаемого, если функция не указывает более конкретную.
Замечания
Реализация по умолчанию проверяет объект исключения и ищет сообщение об ошибке, описывающее причину. Если определенное сообщение не найдено или e
если это NULL
, используется общее сообщение, указанное параметром nIDPDefault
. Затем функция отображает окно сообщения, содержащее сообщение об ошибке. Переопределите эту функцию, если вы хотите предоставить дополнительные настраиваемые сообщения об ошибках. Это расширенная переопределение.
CDocument::SaveModified
Вызывается платформой перед закрытием измененного документа.
virtual BOOL SaveModified();
Возвращаемое значение
Ненулевое значение, если оно безопасно для продолжения и закрытия документа; Значение 0, если документ не должен быть закрыт.
Замечания
Реализация этой функции по умолчанию отображает окно сообщения с запросом пользователя о том, следует ли сохранять изменения в документе, если они были сделаны. Переопределите эту функцию, если для программы требуется другая процедура запроса. Это расширенная переопределение.
CDocument::SetChunkValue
Задает значение блока.
virtual BOOL SetChunkValue (IFilterChunkValue* pValue);
Параметры
pValue
Задает заданное значение блока.
Возвращаемое значение
Имеет ненулевое значение в случае успешного выполнения, иначе — 0.
Замечания
CDocument::SetModifiedFlag
Вызовите эту функцию после внесения изменений в документ.
virtual void SetModifiedFlag(BOOL bModified = TRUE);
Параметры
bModified
Флаг, указывающий, был ли изменен документ.
Замечания
Путем последовательного вызова этой функции необходимо убедиться, что платформа предложит пользователю сохранить изменения перед закрытием документа. Обычно для параметра следует использовать значение TRUE
bModified
по умолчанию. Чтобы пометить документ как чистый (неизмененные), вызовите эту функцию со значением FALSE
.
CDocument::SetPathName
Вызовите эту функцию, чтобы указать полный путь к файлу диска документа.
virtual void SetPathName(
LPCTSTR lpszPathName,
BOOL bAddToMRU = TRUE);
Параметры
lpszPathName
Указывает на строку, используемую в качестве пути к документу.
bAddToMRU
Определяет, добавляется ли имя файла в список недавно использованных файлов (MRU). Если TRUE
имя файла добавляется; если FALSE
он не добавлен.
Замечания
В зависимости от значения bAddToMRU
пути добавляется или не добавляется в список MRU, поддерживаемый приложением. Обратите внимание, что некоторые документы не связаны с файлом диска. Вызовите эту функцию, только если вы переопределяете реализацию по умолчанию для открытия и сохранения файлов, используемых платформой.
CDocument::SetTitle
Вызовите эту функцию, чтобы указать название документа (строка, отображаемая в строке заголовка окна кадра).
virtual void SetTitle(LPCTSTR lpszTitle);
Параметры
lpszTitle
Указывает на строку, используемую в качестве заголовка документа.
Замечания
Вызов этой функции обновляет заголовки всех окон кадров, отображающих документ.
CDocument::UpdateAllViews
Вызовите эту функцию после изменения документа.
void UpdateAllViews(
CView* pSender,
LPARAM lHint = 0L,
CObject* pHint = NULL);
Параметры
pSender
Указывает на представление, изменяющее документ, или NULL
если все представления должны быть обновлены.
lHint
Содержит сведения об изменении.
pHint
Указывает на объект, в котором хранятся сведения об изменении.
Замечания
Эту функцию следует вызывать после вызова SetModifiedFlag
функции-члена. Эта функция сообщает каждому представлению, присоединенному к документу, за исключением представления, указанного pSender
в документе, о том, что документ был изменен. Обычно эта функция вызывается из класса представления после того, как пользователь изменил документ через представление.
Эта функция вызывает CView::OnUpdate
функцию-член для каждого представления документа, кроме представления отправки, передачи pHint
и lHint
. Используйте эти параметры для передачи сведений в представления об изменениях, внесенных в документ. Вы можете кодировать информацию с помощью lHint
и(или) можно определить производный CObject
класс для хранения сведений об изменениях и передачи объекта этого класса с помощью pHint
. Переопределите CView::OnUpdate
функцию-член в CView
производном классе, чтобы оптимизировать обновление отображения представления на основе переданных сведений.
Пример
void CExampleDoc::OnUpdateAllViews()
{
UpdateAllViews(NULL);
}
См. также
Пример MFC MDIDOCVW
Пример MFC SNAPVW
Пример MFC NPP
CCmdTarget
Класс
Диаграмма иерархии
CCmdTarget
Класс
CView
Класс
CDocTemplate
Класс