Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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
IPersistStorageinterfaz , es decir, debe proporcionar unaIStorageinstancia a cada documento activo.Admita las características básicas de inserción de documentos OLE, lo que necesita objetos "site" (uno por documento o inserción) que implemente
IOleClientSiteyIAdviseSink.Compatibilidad con la activación local de objetos incrustados o documentos activos. Los objetos de sitio del contenedor deben implementarse
IOleInPlaceSitey el objeto de marco del contenedor debe proporcionarIOleInPlaceFrame.Admita las extensiones de documentos activos mediante la implementación
IOleDocumentSitepara proporcionar el mecanismo para que el contenedor hable con el documento. Opcionalmente, el contenedor puede implementar las interfacesIOleCommandTargetde documento activas yIContinueCallbackrecoger 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.
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 documento
En la arquitectura de contención de documentos activa, un sitio de documento es el mismo que un objeto de sitio cliente en documentos OLE con la adición de la IOleDocument interfaz:
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 vista de un contenedor administra el espacio para mostrar de una vista determinada de un documento. Además de admitir la interfaz estándar IOleInPlaceSite , un sitio de vista también se implementa IContinueCallback generalmente para el control de impresión mediante programación. (Tenga en cuenta que el objeto de vista nunca consulta para IContinueCallback para que pueda implementarse realmente en cualquier objeto que desee el contenedor).
Un contenedor que admita varias vistas debe poder crear varios objetos de sitio de vista dentro del sitio de documento. Esto proporciona cada vista con servicios de activación y desactivación independientes, tal como se proporciona a través de IOleInPlaceSite.
Frame (objeto)
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 a través IOleInPlaceSite::GetWindowContextde , que también proporciona acceso al objeto contenedor que representa el documento contenedor (que puede controlar la negociación de la barra de herramientas de nivel de panel y la enumeración de objetos independiente).
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, vea Destinos de comandos.