Контейнеры активных документов
Активный контейнер документов, например Microsoft Office Binder или Internet Обозреватель, позволяет работать с несколькими документами различных типов приложений в одном кадре (вместо того, чтобы создавать и использовать несколько кадров приложений для каждого типа документа).
MFC обеспечивает полную поддержку активных контейнеров документов в COleDocObjectItem
классе. Мастер приложений MFC можно использовать для создания активного контейнера документов, выбрав контейнер active document проверка на странице поддержки составных документов мастера приложений MFC. Дополнительные сведения см. в разделе "Создание активного приложения контейнера документов".
Дополнительные сведения о активных контейнерах документов см. в следующем разделе:
Требования к контейнерам
Поддержка активных документов в активном контейнере документов подразумевает больше, чем просто реализации интерфейса: также требуется знание об использовании интерфейсов содержащегося объекта. Это же относится к активным расширениям документов, где контейнер также должен знать, как использовать эти интерфейсы расширений в активных документах.
Активный контейнер документов, который интегрирует активные документы, должен:
Будьте способны обрабатывать хранилище объектов через
IPersistStorage
интерфейс, то есть он должен предоставить экземпляр каждому активному документуIStorage
.Поддержка основных функций внедрения документов OLE, требующих объектов сайта (по одному на документ или внедрение), реализующих и которые реализуют
IOleClientSite
.IAdviseSink
Поддержка активации внедренных объектов или активных документов на месте. Объекты сайта контейнера должны реализовываться
IOleInPlaceSite
, а объект кадра контейнера должен предоставлятьIOleInPlaceFrame
.Поддержка расширений активных документов путем реализации
IOleDocumentSite
механизма взаимодействия контейнера с документом. При необходимости контейнер может реализовать активные интерфейсыIOleCommandTarget
документов иIContinueCallback
получить простые команды, такие как печать или сохранение.
Объект кадра, объекты представления и объект контейнера могут при необходимости реализовать IOleCommandTarget
для поддержки отправки определенных команд, как описано в разделе "Целевые объекты команд". Объекты представления и контейнера также могут реализовать IPrint
и IContinueCallback
поддерживать программную печать, как описано в программной печати.
На следующем рисунке показаны концептуальные связи между контейнером и его компонентами (слева) и активным документом и его представлениями (справа). Активный документ управляет хранилищем и данными, а представление отображает или при необходимости печатает эти данные. Интерфейсы полужирного шрифта являются обязательными для активного участия в документе; эти полужирные и курсивные являются необязательными. Требуются все остальные интерфейсы.
Документ, поддерживающий только одно представление, может реализовать компоненты представления и документа (т. е. соответствующие интерфейсы) в одном конкретном классе. Кроме того, сайт контейнера, поддерживающий только одно представление, может объединить сайт документа и сайт представления в один конкретный класс сайта сайта. Однако объект кадра контейнера должен оставаться уникальным, и компонент документа контейнера просто включен здесь, чтобы дать полное представление об архитектуре; Он не влияет на архитектуру активного хранения документов.
Объекты сайта документа
В активной архитектуре хранения документов сайт документа совпадает с объектом клиентского сайта в OLE Documents с добавлением IOleDocument
интерфейса:
interface IOleDocumentSite : IUnknown
{
HRESULT ActivateMe(IOleDocumentView *pViewToActivate);
}
Сайт документа является концептуально контейнером для одного или нескольких объектов представления сайта. Каждый объект сайта представления связан с отдельными объектами представления документа, управляемым сайтом документа. Если контейнер поддерживает только одно представление для каждого сайта документа, он может реализовать сайт документа и сайт представления с одним конкретным классом.
Просмотр объектов сайта
Объект сайта представления контейнера управляет отображаемым пространством для определенного представления документа. Помимо поддержки стандартного IOleInPlaceSite
интерфейса, сайт представления также обычно реализуется IContinueCallback
для программного управления печатью. (Обратите внимание, что объект представления никогда не запрашивает запросы, IContinueCallback
чтобы он на самом деле может быть реализован в любом объекте, который хочет контейнера.)
Контейнер, поддерживающий несколько представлений, должен иметь возможность создавать несколько объектов сайта представления на сайте документа. Это обеспечивает каждое представление с отдельными службами активации и деактивации, предоставляемыми через IOleInPlaceSite
.
Объект кадра
Объект кадра контейнера— это, в большинстве случаев, тот же кадр, который используется для активации на месте в OLE Documents, то есть тот, который обрабатывает согласование меню и панели инструментов. Объект представления имеет доступ к этому объекту IOleInPlaceSite::GetWindowContext
кадра, который также предоставляет доступ к объекту контейнера, представляющего документ контейнера (который может обрабатывать согласование панели инструментов на уровне области и перечисление содержащихся объектов).
Активный контейнер документов может расширить кадр, добавив IOleCommandTarget
. Это позволяет получать команды, которые возникают в пользовательском интерфейсе активного документа таким же образом, как этот интерфейс может разрешить контейнеру отправлять те же команды (например, "Создать файл", "Открыть", "Сохранить как", "Печать"; Изменение копировать, вставлять, отменять и другие) в активный документ. Дополнительные сведения см. в разделе "Целевые объекты команд".