Поделиться через


Активные документы

Активные документы расширяют составную технологии OLE документа. Эти расширения представлены в форме дополнительных интерфейсов, которые управляют представления, чтобы объекты могли функция внутри контейнеров, а также сохранить элемент управления по своим функциями отображения и печати. Этот процесс дает возможность отображения документов, в чужих кадрах (например, Microsoft Office Binder, так и в Microsoft Internet Explorer) и в собственных кадрах (например порты представления продукта собственные).

В этом разделе описаны функциональное требования для активных документов. Активный документ содержит набор данных и имеет доступ к хранилищу данных, можно сохранять и извлекать. Он может создать и управления один или несколько представлений на основе своих данных. Помимо поддержки обычные интерфейсы и внедрение встроенной активации OLE документов, активный документ передает его возможность создания представления через IOleDocument. Через этот интерфейс, контейнер может запросить создание (и, возможно, перечисления) представления, активный документ может отобразить. Через этот интерфейс, активный документ может предоставлять различные сведения о себе, например, поддерживает ли он несколько представлений или прямоугольники сложными.

Следующий интерфейс IOleDocument . Обратите внимание, что интерфейс IEnumOleDocumentViews OLE стандартный перечислитель для типа IOleDocumentView *.

interface IOleDocument : IUnknown

{

HRESULT CreateView(

[in] IOleInPlaceSite *pIPSite,

[in] IStream *pstm,

[in] DWORD dwReserved,

[out] IOleDocumentView **ppView);

HRESULT GetDocMiscStatus([out] DWORD *pdwStatus);

HRESULT EnumViews(

[out] IEnumOleDocumentViews **ppEnum,

[out] IOleDocumentView **ppView);

}

Каждый активный документ должен иметь поставщика кадра представления с этим интерфейсом. Если документ не внедряется в контейнере, сервер активных документов сам должен предоставить кадр представления. Однако если активный документ внедряется в контейнер активных документов, контейнер предоставляет кадр представления.

Активный документ может создать один или несколько типов представления его данных (например, -, структуры разметки страницы и т д). Представления действуют аналогично фильтры по, данные можно отобразить. Даже если документ содержит только один тип представления, можно по-прежнему может поддерживать несколько представлений для средство поддерживать функцию нового окна (например, элемент Новое окно в меню Окно в приложениях office).

Требования для активных документов

Активный документ, который может быть отображен в контейнер активных документов:

  • Используйте OLE составных файлов в качестве механизма хранения путем реализации IPersistStorage.

  • Поддержка внедряя базовые функции OLE документов, включая Создайте из файла. Это требует интерфейсы IPersistFile, IOleObject и IDataObject.

  • Поддержка один или несколько представлений, каждый из которых поддерживает встроенной активации. То есть представления должны поддерживать интерфейс IOleDocumentView, так и интерфейсы IOleInPlaceObject и IOleInPlaceActiveObject (используя интерфейсы IOleInPlaceSite и IOleInPlaceFrame контейнера).

  • Поддержка интерфейсов IOleDocument, IOleCommandTarget и IPrint активного документа стандарта.

Знание случаи и способы использования интерфейсов контейнер- стороны выводится в этих требований.

Требования для объектов представления

Активный документ может создать один или несколько представлений его данных. Функционально, эти представления как портов на конкретный метод для отображения данных. Если активный документ поддерживает только одно представление, активный документ и это одно представление можно реализовать с помощью один класс. IOleDocument::CreateView возвращает указатель интерфейса IOleDocumentView одного и того же объекта.

Для представления внутри контейнера активных документов компонент должен поддерживать представления IOleInPlaceObject и IOleInPlaceActiveObject в дополнение к IOleDocumentView:

interface IOleDocumentView : IUnknown

{

HRESULT SetInPlaceSite([in] IOleInPlaceSite *pIPSite);

HRESULT GetInPlaceSite([out] IOleInPlaceSite **ppIPSite);

HRESULT GetDocument([out] IUnknown **ppunk);

[input_sync] HRESULT SetRect([in] LPRECT prcView);

HRESULT GetRect([in] LPRECT prcView);

[input_sync] HRESULT SetRectComplex(

[in] LPRECT prcView,

[in] LPRECT prcHScroll,

[in] LPRECT prcVScroll,

[in] LPRECT prcSizeBox);

HRESULT Show([in] BOOL fShow);

HRESULT UIActivate([in] BOOL fUIActivate);

HRESULT Open(void);

HRESULT CloseView([in] DWORD dwReserved);

HRESULT SaveViewState([in] IStream *pstm);

HRESULT ApplyViewState([in] IStream *pstm);

HRESULT Clone(

[in] IOleInPlaceSite *pIPSiteNew,

[out] IOleDocumentView **ppViewNew);

}

Каждое представление имеет сайт связанного представления, который инкапсулирует кадр представления и порт представления (HWND и прямоугольная область в этом окне). Однако эта функция сайт предоставляет стандартный интерфейс IOleInPlaceSite . Обратите внимание, что можно иметь несколько порт представления на одном HWND.

Как правило, каждый тип представления имеет другое представление вывод. Следовательно, представления и соответствующие сайты представления должны реализовать интерфейсы печати, если IPrint и IContinueCallback соответственно. Фрейм представления следует обсудить с поставщиком с помощью представления IPrint при печати начинается, чтобы заголовки, нижние колонтитулы, поля и связанные элементы будут напечатаны правильно. Поставщик представления уведомляет кадр печать- событий, связанных с помощью IContinueCallback. Дополнительные сведения об использовании этих интерфейсов см. в разделе Программная печать.

Обратите внимание, что если активный документ поддерживает только одно представление, а затем активный документ и что одно представление можно реализовать с помощью один конкретный класс. IOleDocument::CreateView просто возвращает указатель интерфейса IOleDocumentView одного и того же объекта. Вкратце, не требуется, что 2 отдельного экземпляра объекта, если только одно представление не требуется.

Объект представления также может быть конечным объектом команды. Путем реализации IOleCommandTarget представление может доступа к командам, расположенных в интерфейсе пользователя контейнера (например, Создать, Открыть, Сохранить как, Печать в меню Файл. Копировать, Вставить и Отменить в меню Изменить ). Для получения дополнительной информации см. Обработка сообщений и цели команд.

См. также

Основные понятия

Вложение активного документа