Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Активный контейнер документов, например Microsoft Office Binder или Internet Explorer, позволяет работать с несколькими документами различных типов приложений в одном кадре (вместо того, чтобы создавать и использовать несколько кадров приложений для каждого типа документа).
MFC обеспечивает полную поддержку активных контейнеров документов в COleDocObjectItem классе. Мастер приложений MFC можно использовать для создания активного контейнера документов, установив флажок "Активный контейнер документов " на странице поддержки составных документов мастера приложений 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.
Объект Frame
Объект кадра контейнера, в большинстве случаев, представляет собой тот же кадр, который используется для активации на месте в OLE-документах, а именно тот, который отвечает за согласование меню и панели инструментов. Объект вида имеет доступ к этому объекту кадра IOleInPlaceSite::GetWindowContext, который также предоставляет доступ к объекту контейнера, представляющему документ-контейнер (который может обрабатывать согласование панели инструментов на уровне панели и перебор содержащихся объектов).
Активный контейнер документов может расширить кадр, добавив IOleCommandTarget. Это позволяет получать команды, которые возникают в пользовательском интерфейсе активного документа таким же образом, как этот интерфейс может разрешить контейнеру отправлять те же команды (например, "Создать файл", "Открыть", "Сохранить как", "Печать"; Изменение копировать, вставлять, отменять и другие) в активный документ. Дополнительные сведения см. в разделе "Целевые объекты команд".