Класс CDocTemplate
Абстрактный базовый класс, который определяет базовую функциональность шаблонов документов.
Синтаксис
class CDocTemplate : public CCmdTarget
Участники
Защищенные конструкторы
Имя | Описание |
---|---|
CDocTemplate::CDocTemplate |
Формирует объект CDocTemplate . |
Открытые методы
Имя | Описание |
---|---|
CDocTemplate::AddDocument |
Добавляет документ в шаблон. |
CDocTemplate::CloseAllDocuments |
Закрывает все документы, связанные с этим шаблоном. |
CDocTemplate::CreateNewDocument |
Создает новый документ. |
CDocTemplate::CreateNewFrame |
Создает новое окно фрейма, содержащее документ и представление. |
CDocTemplate::CreateOleFrame |
Создает окно кадров с поддержкой OLE. |
CDocTemplate::CreatePreviewFrame |
Создает дочерний кадр, используемый для расширенной предварительной версии. |
CDocTemplate::GetDocString |
Извлекает строку, связанную с типом документа. |
CDocTemplate::GetFirstDocPosition |
Извлекает положение первого документа, связанного с этим шаблоном. |
CDocTemplate::GetNextDoc |
Извлекает документ и положение следующего. |
CDocTemplate::InitialUpdateFrame |
Инициализирует окно фрейма и при необходимости делает его видимым. |
CDocTemplate::LoadTemplate |
Загружает ресурсы для заданного CDocTemplate или производного класса. |
CDocTemplate::MatchDocType |
Определяет степень достоверности соответствия между типом документа и этим шаблоном. |
CDocTemplate::OpenDocumentFile |
Открывает файл, заданный именем пути. |
CDocTemplate::RemoveDocument |
Удаляет документ из шаблона. |
CDocTemplate::SaveAllModified |
Сохраняет все документы, связанные с этим шаблоном, которые были изменены. |
CDocTemplate::SetContainerInfo |
Определяет ресурсы для контейнеров OLE при редактировании элемента OLE на месте. |
CDocTemplate::SetDefaultTitle |
Отображает заголовок по умолчанию в строке заголовка окна документа. |
CDocTemplate::SetPreviewInfo |
Настройки вне обработчика предварительной версии процесса. |
CDocTemplate::SetServerInfo |
Определяет ресурсы и классы, когда серверный документ внедрен или редактируется на месте. |
Замечания
Обычно вы создаете один или несколько шаблонов документов в реализации функции приложения InitInstance
. Шаблон документа определяет связи между тремя типами классов:
Класс документа, производный от
CDocument
.Класс представления, который отображает данные из класса документа, указанного выше. Вы можете наследить этот класс от
CView
, илиCEditView
CScrollView
CFormView
. (Вы также можете использоватьCEditView
напрямую.)Класс окна кадра, содержащий представление. Для одного приложения интерфейса документа (SDI) вы наследуете этот класс.
CFrameWnd
Для нескольких приложений интерфейса документов (MDI) вы наследуете этот класс.CMDIChildWnd
Если вам не нужно настраивать поведение окна фрейма, можно использоватьCFrameWnd
илиCMDIChildWnd
напрямую без получения собственного класса.
Приложение имеет один шаблон документа для каждого типа документа, который он поддерживает. Например, если приложение поддерживает как электронные таблицы, так и текстовые документы, приложение имеет два объекта шаблона документа. Каждый шаблон документа отвечает за создание и управление всеми документами своего типа.
Шаблон документа сохраняет указатели на CRuntimeClass
объекты для классов окна документа, представления и фрейма. Эти CRuntimeClass
объекты указываются при создании шаблона документа.
Шаблон документа содержит идентификатор ресурсов, используемых с типом документа (например, меню, значком или ресурсами таблицы акселератора). Шаблон документа также содержит строки, содержащие дополнительные сведения о типе документа. К ним относятся имя типа документа (например, "Лист") и расширение файла (например, ".xls"). При необходимости он может содержать другие строки, используемые пользовательским интерфейсом приложения, диспетчером файлов Windows и поддержкой связывания объектов и внедрения (OLE).
Если приложение является контейнером OLE и (или) сервером, шаблон документа также определяет идентификатор меню, используемого во время активации на месте. Если приложение является сервером OLE, шаблон документа определяет идентификатор панели инструментов и меню, используемого во время активации на месте. Вы указываете эти дополнительные ресурсы OLE, вызывая SetContainerInfo
и SetServerInfo
.
Так как CDocTemplate
это абстрактный класс, вы не можете использовать этот класс напрямую. Обычное приложение использует один из двух CDocTemplate
производных классов, предоставляемых библиотекой классов Microsoft Foundation: CSingleDocTemplate
который реализует SDI и CMultiDocTemplate
реализует MDI. Дополнительные сведения об использовании шаблонов документов см. в этих классах.
Если приложению требуется парадигма пользовательского интерфейса, которая существенно отличается от SDI или MDI, вы можете получить собственный класс.CDocTemplate
Дополнительные сведения см CDocTemplate
. в разделе "Шаблоны документов" и "Процесс создания документа/представления".
Иерархия наследования
CDocTemplate
Требования
Заголовок: afxwin.h
CDocTemplate::AddDocument
Используйте эту функцию для добавления документа в шаблон.
virtual void AddDocument(CDocument* pDoc);
Параметры
pDoc
Указатель на добавляемый документ.
Замечания
Производные классы CMultiDocTemplate
и CSingleDocTemplate
переопределите эту функцию. Если вы наследуете собственный класс шаблона документа, CDocTemplate
производный класс должен переопределить эту функцию.
CDocTemplate::CDocTemplate
Формирует объект CDocTemplate
.
CDocTemplate (
UINT nIDResource,
CRuntimeClass* pDocClass,
CRuntimeClass* pFrameClass,
CRuntimeClass* pViewClass);
Параметры
nIDResource
Указывает идентификатор ресурсов, используемых с типом документа. Это может включать меню, значок, таблицу акселератора и строковые ресурсы.
Строковый ресурс состоит из семи подстроок, разделенных символом \n
( \n
символ необходим в качестве держателя места, если подстрока не включена; однако конечные \n
символы не нужны); эти подстроки описывают тип документа. Дополнительные сведения о подстроках см. в разделе GetDocString
. Этот строковый ресурс находится в файле ресурсов приложения. Например:
// MYCALC.RC
STRINGTABLE PRELOAD DISCARDABLE
BEGIN
IDR_SHEETTYPE "\nSheet\nWorksheet\nWorksheets (*.myc)\n.myc\n MyCalcSheet\nMyCalc Worksheet"
END
Обратите внимание, что строка начинается с символа \n
. Это связано с тем, что первая подстрока не используется для приложений MDI и поэтому не включается. Эту строку можно изменить с помощью редактора строк; Вся строка отображается как одна запись в редакторе строк, а не как семь отдельных записей.
pDocClass
Указывает на CRuntimeClass
объект класса документа. Этот класс является производным классом CDocument
, который определяется для представления документов.
pFrameClass
Указывает на CRuntimeClass
объект класса окна фрейма. Этот класс может быть производным CFrameWnd
от класса или может быть сам по себе, если требуется CFrameWnd
поведение по умолчанию для главного окна фрейма.
pViewClass
Указывает на CRuntimeClass
объект класса представления. Этот класс является производным классом CView
, который определяется для отображения документов.
Замечания
Используйте эту функцию-член для создания CDocTemplate
объекта. Динамически выделяет CDocTemplate
объект и передает его CWinApp::AddDocTemplate
из InitInstance
функции-члена класса приложения.
CDocTemplate::CloseAllDocuments
Вызовите эту функцию-член, чтобы закрыть все открытые документы.
virtual void CloseAllDocuments(BOOL bEndSession);
Параметры
bEndSession
Не используется.
Замечания
Эта функция-член обычно используется в рамках команды "Выход из файла". Реализация этой функции по умолчанию вызывает CDocument::DeleteContents
функцию-член для удаления данных документа, а затем закрывает окна кадров для всех представлений, подключенных к документу.
Переопределите эту функцию, если требуется, чтобы пользователь выполнял специальную обработку очистки перед закрытием документа. Например, если документ представляет запись в базе данных, может потребоваться переопределить эту функцию, чтобы закрыть базу данных.
CDocTemplate::CreateNewDocument
Вызовите эту функцию-член, чтобы создать новый документ типа, связанного с этим шаблоном документа.
virtual CDocument* CreateNewDocument();
Возвращаемое значение
Указатель на только что созданный документ или NULL
возникает ошибка.
CDocTemplate::CreateNewFrame
Создает новое окно фрейма, содержащее документ и представление.
virtual CFrameWnd* CreateNewFrame(
CDocument* pDoc,
CFrameWnd* pOther);
Параметры
pDoc
Документ, к которому должно ссылаться новое окно фрейма. Может иметь значение NULL
.
pOther
Окно фрейма, на котором будет основано новое окно фрейма. Может иметь значение NULL
.
Возвращаемое значение
Указатель на только что созданное окно фрейма или NULL
возникает ошибка.
Замечания
CreateNewFrame
использует объекты, переданные CRuntimeClass
конструктору, для создания нового окна фрейма с вложенным представлением и документом. pDoc
Если параметр имеет значениеNULL
, платформа выводит TRACE
сообщение.
Параметр pOther
используется для реализации команды Window New. Он предоставляет окно фрейма, на котором моделировается новое окно фрейма. Окно нового фрейма обычно создается невидимым. Вызовите эту функцию, чтобы создать окна фреймов вне стандартной реализации платформы File New and File Open.
CDocTemplate::CreateOleFrame
Создает окно фрейма OLE.
CFrameWnd* CreateOleFrame(
CWnd* pParentWnd,
CDocument* pDoc,
BOOL bCreateView);
Параметры
pParentWnd
Указатель на родительское окно кадра.
pDoc
Указатель на документ, к которому должно ссылаться новое окно фрейма OLE.
bCreateView
Определяет, создается ли представление вместе с кадром.
Возвращаемое значение
Указатель на окно кадра в случае успешного выполнения; в противном случае NULL
.
Замечания
Если bCreateView
значение равно нулю, создается пустой кадр.
CDocTemplate::GetDocString
Извлекает строку, связанную с типом документа.
virtual BOOL GetDocString(
CString& rString,
enum DocStringIndex index) const;
Параметры
rString
Ссылка на CString
объект, содержащий строку при возврате функции.
index
Индекс подстроки, извлекаемой из строки, описывающей тип документа. Этот параметр может принимать одно из следующих значений:
CDocTemplate::windowTitle
Имя, отображаемое в строке заголовка окна приложения (например, "Microsoft Excel"). Присутствует только в шаблоне документа для приложений SDI.CDocTemplate::docName
Корневой каталог для имени документа по умолчанию (например, "Лист"). Этот корневой каталог, а также число, используется для имени нового документа этого типа по умолчанию, когда пользователь выбирает команду "Создать " в меню "Файл " (например, "Лист1" или "Лист2"). Если значение не указано, параметр "Без имени" используется в качестве значения по умолчанию.CDocTemplate::fileNewName
Имя этого типа документа. Если приложение поддерживает несколько типов документа, эта строка отображается в диалоговом окне "Создать файл" (например, "Лист"). Если не указано, тип документа недоступен с помощью команды "Создать файл".CDocTemplate::filterName
Описание типа документа и фильтра подстановочных знаков, соответствующих документам этого типа. Эта строка отображается в раскрывающемся списке "Файлы типов" в диалоговом окне "Открытие файла" (например, "Листы (*.xls)"). Если это не указано, тип документа недоступен с помощью команды "Открыть файл".CDocTemplate::filterExt
Расширение для документов этого типа (например, ".xls"). Если это не указано, тип документа недоступен с помощью команды "Открыть файл".CDocTemplate::regFileTypeId
Идентификатор типа документа, хранящегося в базе данных регистрации, поддерживаемой Windows. Эта строка предназначена только для внутреннего использования (например, ExcelWorksheet). Если не указано, тип документа нельзя зарегистрировать в диспетчере файлов Windows.CDocTemplate::regFileTypeName
Имя типа документа, хранящегося в базе данных регистрации. Эта строка может отображаться в диалоговых окнах приложений, обращаюющихся к базе данных регистрации (например, "Лист Microsoft Excel").
Возвращаемое значение
Ненулевое значение, если найдена указанная подстрока; в противном случае — 0.
Замечания
Вызовите эту функцию, чтобы получить определенную подстроку, описывающую тип документа. Строка, содержащая эти подстроки, хранится в шаблоне документа и является производным от строки в файле ресурсов для приложения. Платформа вызывает эту функцию, чтобы получить строки, необходимые для пользовательского интерфейса приложения. Если вы указали расширение имени файла для документов приложения, платформа также вызывает эту функцию при добавлении записи в базу данных регистрации Windows; это позволяет открывать документы из диспетчера файлов Windows.
Вызовите эту функцию, только если вы используете собственный класс CDocTemplate
.
CDocTemplate::GetFirstDocPosition
Извлекает положение первого документа, связанного с этим шаблоном.
virtual POSITION GetFirstDocPosition() const = 0;
Возвращаемое значение
POSITION
Значение, которое можно использовать для итерации по списку документов, связанных с этим шаблоном документа; или NULL
если список пуст.
Замечания
Эта функция используется для получения позиции первого документа в списке документов, связанных с этим шаблоном. POSITION
Используйте значение в качестве аргумента для CDocTemplate::GetNextDoc
итерации списка документов, связанных с шаблоном.
CSingleDocTemplate
и CMultiDocTemplate
оба переопределяют эту чистую виртуальную функцию. Любой производный от класса CDocTemplate
должен также переопределить эту функцию.
CDocTemplate::GetNextDoc
Извлекает элемент списка, определенный rPos
, а затем задает rPos
POSITION
значение следующей записи в списке.
virtual CDocument* GetNextDoc(POSITION& rPos) const = 0;
Возвращаемое значение
Указатель на следующий документ в списке документов, связанных с этим шаблоном.
Параметры
rPos
Ссылка на POSITION
значение, возвращаемое предыдущим вызовом GetFirstDocPosition
или GetNextDoc
.
Замечания
Если извлеченный элемент является последним в списке, то для нового значения rPos
задано значение NULL
.
Вы можете использовать GetNextDoc
в цикле итерации пересылки, если установить начальную позицию с вызовом GetFirstDocPosition
.
Необходимо убедиться, что значение POSITION
представляет допустимую позицию в списке. Если это недопустимо, то утверждается отладочная версия библиотеки классов Microsoft Foundation.
CDocTemplate::InitialUpdateFrame
Инициализирует окно фрейма и при необходимости делает его видимым.
virtual void InitialUpdateFrame(
CFrameWnd* pFrame,
CDocument* pDoc,
BOOL bMakeVisible = TRUE);
Параметры
pFrame
Окно фрейма, которое требует начального обновления.
pDoc
Документ, к которому связан кадр. Может иметь значение NULL
.
bMakeVisible
Указывает, должен ли кадр стать видимым и активным.
Замечания
Вызов IntitialUpdateFrame
после создания нового кадра с CreateNewFrame
помощью . Вызов этой функции приводит к тому, что представления в этом окне фрейма будут получать их OnInitialUpdate
вызовы. Кроме того, если ранее не было активного представления, основное представление окна кадра активируется; основное представление — это представление с дочерним идентификатором AFX_IDW_PANE_FIRST
. Наконец, окно кадра отображается, если bMakeVisible
ненулевая. Если bMakeVisible
значение равно нулю, текущий фокус и видимое состояние окна кадра останется неизменным.
Эта функция не требуется вызывать при использовании реализации платформы "Создать файл" и "Открыть файл".
CDocTemplate::LoadTemplate
Загружает ресурсы для заданного CDocTemplate
или производного класса.
virtual void LoadTemplate();
Замечания
Эта функция-член вызывается платформой для загрузки ресурсов для заданного CDocTemplate
или производного класса. Обычно он вызывается во время строительства, за исключением случаев, когда шаблон строится глобально. В этом случае вызов LoadTemplate
задерживается до CWinApp::AddDocTemplate
вызова.
CDocTemplate::MatchDocType
Определяет степень достоверности соответствия между типом документа и этим шаблоном.
virtual Confidence MatchDocType(
LPCTSTR lpszPathName,
CDocument*& rpDocMatch);
Параметры
lpszPathName
Имя пути файла, тип которого необходимо определить.
rpDocMatch
Указатель на документ, которому назначен соответствующий документ, если файл, указанный lpszPathName
уже открыт.
Возвращаемое значение
Значение из Confidence
перечисления, которое определяется следующим образом:
enum Confidence
{
noAttempt,
maybeAttemptForeign,
maybeAttemptNative,
yesAttemptForeign,
yesAttemptNative,
yesAlreadyOpen
};
Замечания
Эта функция позволяет определить тип шаблона документа, используемого для открытия файла. Если приложение поддерживает несколько типов файлов, например, эту функцию можно использовать, чтобы определить, какой из доступных шаблонов документов подходит для данного файла, вызвав MatchDocType
каждый шаблон в свою очередь и выбрав шаблон в соответствии с возвращаемым значением достоверности.
Если файл, указанный lpszPathName
уже открыт, эта функция возвращает CDocTemplate::yesAlreadyOpen
и копирует объект файла CDocument
в объект по адресу rpDocMatch
.
Если файл не открыт, но расширение соответствует lpszPathName
расширению, заданному CDocTemplate::filterExt
этим, эта функция возвращает и задает CDocTemplate::yesAttemptNative
rpDocMatch
значение NULL
. Дополнительные сведения о методе CDocTemplate::filterExt
см. в разделе CDocTemplate::GetDocString
.
Если ни в чем случае не имеет значения true, функция возвращается CDocTemplate::yesAttemptForeign
.
Реализация по умолчанию не возвращает или CDocTemplate::maybeAttemptNative
не возвращаетCDocTemplate::maybeAttemptForeign
. Переопределите эту функцию, чтобы реализовать логику сопоставления типов, соответствующую приложению, возможно, используя эти два значения из Confidence
перечисления.
CDocTemplate::OpenDocumentFile
Открывает файл, указанный путем.
virtual CDocument* OpenDocumentFile(LPCTSTR lpszPathName) = 0;
virtual CDocument* OpenDocumentFile(
LPCTSTR lpszPathName,
BOOL bAddToMRU) = 0;
Параметры
lpszPathName
[in] Указатель на путь к файлу, который содержит открытый документ.
bAddToMRU
[in] TRUE
указывает, что документ является одним из самых последних файлов; FALSE
указывает, что документ не является одним из последних файлов.
Возвращаемое значение
Указатель на документ, файл которого называется lpszPathName
; NULL
в случае неудачного выполнения.
Замечания
Открывает файл, путь к которому указан lpszPathName
. Если lpszPathName
это NULL
так, создается новый файл, содержащий документ типа, связанного с этим шаблоном.
CDocTemplate::RemoveDocument
Удаляет документ, на который указывает pDoc
список документов, связанных с этим шаблоном.
virtual void RemoveDocument(CDocument* pDoc);
Параметры
pDoc
Указатель на документ, который нужно удалить.
Замечания
Производные классы CMultiDocTemplate
и CSingleDocTemplate
переопределите эту функцию. Если вы наследуете собственный класс шаблона документа, CDocTemplate
производный класс должен переопределить эту функцию.
CDocTemplate::SaveAllModified
Сохраняет все измененные документы.
virtual BOOL SaveAllModified();
Возвращаемое значение
Ненулевое значение при успешном выполнении; в противном случае — 0.
CDocTemplate::SetContainerInfo
Определяет ресурсы для контейнеров OLE при редактировании элемента OLE на месте.
void SetContainerInfo(UINT nIDOleInPlaceContainer);
Параметры
nIDOleInPlaceContainer
Идентификатор ресурсов, используемых при активации внедренного объекта.
Замечания
Вызовите эту функцию, чтобы задать ресурсы, используемые при активации объекта OLE. Эти ресурсы могут включать меню и таблицы акселераторов. Эта функция обычно вызывается в CWinApp::InitInstance
функции приложения.
Меню, связанное с nIDOleInPlaceContainer
разделителями, которые позволяют меню активированного элемента на месте объединяться с меню приложения контейнера. Дополнительные сведения о слиянии серверных и контейнерных меню см. в статье "Меню и ресурсы" (OLE).
CDocTemplate::SetDefaultTitle
Вызовите эту функцию, чтобы загрузить заголовок документа по умолчанию и отобразить его в строке заголовка документа.
virtual void SetDefaultTitle(CDocument* pDocument) = 0;
Параметры
pDocument
Указатель на документ, заголовок которого должен быть задан.
Замечания
Сведения о заголовке по умолчанию см. в описанииCDocTemplate::docName
.CDocTemplate::GetDocString
CDocTemplate::SetServerInfo
Определяет ресурсы и классы, когда серверный документ внедрен или редактируется на месте.
void SetServerInfo(
UINT nIDOleEmbedding,
UINT nIDOleInPlaceServer = 0,
CRuntimeClass* pOleFrameClass = NULL,
CRuntimeClass* pOleViewClass = NULL);
Параметры
nIDOleEmbedding
Идентификатор ресурсов, используемых при открытии внедренного объекта в отдельном окне.
nIDOleInPlaceServer
Идентификатор ресурсов, используемых при активации внедренного объекта на месте.
pOleFrameClass
Указатель на CRuntimeClass
структуру, содержащую сведения о классе для объекта окна кадра, созданного при активации на месте.
pOleViewClass
Указатель на CRuntimeClass
структуру, содержащую сведения о классе для объекта представления, созданного при активации на месте.
Замечания
Вызовите эту функцию-член, чтобы определить ресурсы, которые будут использоваться серверным приложением, когда пользователь запрашивает активацию внедренного объекта. Эти ресурсы состоят из меню и таблиц акселераторов. Эта функция обычно вызывается в InitInstance
приложении.
Меню, связанное с nIDOleInPlaceServer
разделителями, которые позволяют серверу объединяться с меню контейнера. Дополнительные сведения о слиянии серверных и контейнерных меню см. в статье "Меню и ресурсы" (OLE).
CDocTemplate::CreatePreviewFrame
Создает дочерний кадр, используемый для расширенной предварительной версии.
CFrameWnd* CreatePreviewFrame(
CWnd* pParentWnd,
CDocument* pDoc);
Параметры
pParentWnd
Указатель на родительское окно (обычно предоставляется оболочкой).
pDoc
Указатель на объект документа, содержимое которого будет предварительно просмотрировано.
Возвращаемое значение
Допустимый CFrameWnd
указатель на объект или NULL, если создание завершается ошибкой.
Замечания
CDocTemplate::SetPreviewInfo
Настраивает обработчик предварительного просмотра процесса.
void SetPreviewInfo(
UINT nIDPreviewFrame,
CRuntimeClass* pPreviewFrameClass = NULL,
CRuntimeClass* pPreviewViewClass = NULL);
Параметры
nIDPreviewFrame
Указывает идентификатор ресурса кадра предварительного просмотра.
pPreviewFrameClass
Указывает указатель на структуру сведений о классе среды выполнения кадра предварительного просмотра.
pPreviewViewClass
Указывает указатель на структуру сведений о классе среды выполнения представления предварительного просмотра.
Замечания
См. также
CCmdTarget
Класс
Диаграмма иерархии
CSingleDocTemplate
Класс
CMultiDocTemplate
Класс
CDocument
Класс
CView
Класс
CScrollView
Класс
CEditView
Класс
CFormView
Класс
CFrameWnd
Класс
CMDIChildWnd
Класс