Compartir a través de


Contenedores de documentos activos

Nota:

La biblioteca Microsoft Foundation Classes (MFC) sigue siendo compatible. Sin embargo, ya no estamos agregando características ni actualizando la documentación.

Un contenedor de documentos activo, como Microsoft Office Binder o Internet Explorer, le permite trabajar con varios documentos de diferentes tipos de aplicación dentro de un solo marco (en lugar de forzarle a crear y usar varios marcos de aplicación para cada tipo de documento).

MFC proporciona compatibilidad completa con contenedores de documentos activos en la COleDocObjectItem clase . Puede usar el Asistente para aplicaciones MFC para crear un contenedor de documentos activo si activa la casilla Contenedor de documentos activos en la página Compatibilidad con documentos compuestos del Asistente para aplicaciones MFC. Para obtener más información, consulte Creación de una aplicación contenedora de documentos activa.

Para obtener más información sobre los contenedores de documentos activos, consulte:

Requisitos de contenedor

La compatibilidad con documentos activos en un contenedor de documentos activo implica más que solo implementaciones de interfaz: también requiere conocimientos sobre el uso de las interfaces de un objeto contenido. Lo mismo se aplica a las extensiones de documento activas, donde el contenedor también debe saber cómo usar esas interfaces de extensión en los propios documentos activos.

Un contenedor de documentos activo que integre documentos activos debe:

  • Puede controlar el almacenamiento de objetos a través de la IPersistStorage interfaz , es decir, debe proporcionar una IStorage instancia a cada documento activo.

  • Admitir las características básicas de inserción de documentos OLE, para lo cual necesita objetos de "sitio" (uno por documento o inserción) que implementen IOleClientSite y IAdviseSink.

  • Compatibilidad con la activación local de objetos incrustados o documentos activos. Los objetos del sitio del contenedor deben implementar IOleInPlaceSite y el objeto de marco del contenedor debe proporcionar IOleInPlaceFrame.

  • Admitir las extensiones de los documentos activos mediante la implementación de IOleDocumentSite para proporcionar el mecanismo para que el contenedor se comunique con el documento. Opcionalmente, el contenedor puede implementar las interfaces IOleCommandTarget de documento activas y IContinueCallback recoger comandos simples, como imprimir o guardar.

El objeto frame, los objetos view y el objeto contenedor pueden implementar IOleCommandTarget opcionalmente para admitir el envío de determinados comandos, como se describe en Destinos de comandos. Los objetos de visualización y contenedor también pueden implementar IPrint y IContinueCallback, para admitir la impresión mediante programación, como se describe en Impresión mediante programación.

En la ilustración siguiente se muestran las relaciones conceptuales entre un contenedor y sus componentes (a la izquierda) y el documento activo y sus vistas (a la derecha). El documento activo administra el almacenamiento y los datos, y la vista muestra o, opcionalmente, imprime esos datos. Las interfaces en negrita son las necesarias para la participación activa de documentos; esas negritas y cursiva son opcionales. Se requieren todas las demás interfaces.

Interfaces de contenedor de documentos activas.

Un documento que solo admite una sola vista puede implementar tanto la vista como los componentes de documento (es decir, sus interfaces correspondientes) en una sola clase concreta. Además, un sitio de contenedor que solo admite una vista a la vez puede combinar el sitio de documento y el sitio de vista en una sola clase de sitio concreto. Sin embargo, el objeto de marco del contenedor debe permanecer distinto y el componente de documento del contenedor se incluye simplemente aquí para dar una imagen completa de la arquitectura; no se ve afectado por la arquitectura de contención del documento activo.

Objetos de sitio de documentos

En la arquitectura activa de contención de documentos, un sitio de documentos es igual que un objeto de sitio cliente en documentos OLE, con la adición de la interfaz IOleDocument.

interface IOleDocumentSite : IUnknown
{
    HRESULT ActivateMe(IOleDocumentView *pViewToActivate);
}

El sitio de documento es conceptualmente el contenedor de uno o varios objetos de "sitio de vista". Cada objeto de sitio de vista está asociado a objetos de vista individuales del documento administrado por el sitio del documento. Si el contenedor solo admite una sola vista por sitio de documento, puede implementar el sitio de documento y el sitio de vista con una sola clase concreta.

Ver objetos de sitio

El objeto de sitio de vistas de un contenedor administra el espacio de visualización de una vista determinada de un documento. Además de admitir la interfaz estándar IOleInPlaceSite, un sitio de vista también suele implementar IContinueCallback para el control de impresión mediante programación. Tenga en cuenta que el objeto de vista nunca consulta a IContinueCallback, por lo que realmente puede implementarse en cualquier objeto que el contenedor desee.

Un contenedor que admita varias vistas debe poder crear varios objetos de sitio de vistas dentro del sitio de documento. Esto proporciona a cada vista servicios de activación y desactivación independientes al igual que con IOleInPlaceSite.

Objeto de marco

El objeto frame del contenedor es, en su mayor parte, el mismo marco que se usa para la activación local en documentos OLE, es decir, el que controla la negociación de menús y barras de herramientas. Un objeto de vista tiene acceso a este objeto de marco mediante IOleInPlaceSite::GetWindowContext, el cual también proporciona acceso al objeto de contenedor que representa el documento del contenedor (que puede controlar la negociación de la barra de herramientas en el nivel de panel y la enumeración de los objetos contenidos).

Un contenedor de documentos activo puede aumentar el marco agregando IOleCommandTarget. Esto le permite recibir comandos que se originan en la interfaz de usuario del documento activo de la misma manera que esta interfaz puede permitir que un contenedor envíe los mismos comandos (como File New, Open, Save As, Print; Edite Copiar, Pegar, Deshacer y otros) en un documento activo. Para obtener más información, consulte Destinos de comandos.

Consulte también

Contención de documentos activos