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


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

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

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

Следующий интерфейс IOleDocument .Обратите внимание, что интерфейс OLE IEnumOleDocumentViews стандартный перечислитель для типов 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 Документов, в том числе Create From File.Это требует интерфейсы IPersistFile, IOleObject и IDataObject.

  • Поддержка один или несколько представлений, каждый из которых может выполнять встроенной активации.То есть представления должны поддерживать интерфейс IOleDocumentView так же, как и интерфейсы IOleInPlaceObjectIOleInPlaceActiveObject (с использованием 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 представление может получить команды, которые возникают в пользовательском интерфейсе (например, контейнера СоздатьОткрыть, Сохранить как, Печать в меню Файл; и Копировать, Вставить, Отменить в меню Изменить ).Дополнительные сведения см. в разделе Целевые объекты сообщений и команды.

См. также

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

Вложенность активных документов