Compartir a través de


Contenedores: Características avanzadas

En este artículo, se describen los pasos necesarios para incorporar características avanzadas opcionales en aplicaciones contenedoras existentes. Estas funciones son:

Creación de una aplicación de contenedo/servidor

Una aplicación contenedora/deservidor es una aplicación que actúa como contenedor y servidor. Microsoft Word para Windows es un ejemplo de esto. Puede insertar documentos de Word para Windows en otras aplicaciones y también puede insertar elementos en los documentos de Word para Windows. El proceso para modificar la aplicación contenedora para que sea contenedor y servidor completo (no puede crear una combinación de aplicación contenedora/miniservidor) es similar al proceso de creación de un servidor completo.

En el artículo Servidores: Implementación de un servidor, se muestra un número de tareas necesarias para implementar una aplicación de servidor. Si convierte una aplicación contenedora a una aplicación contenedora/de servidor, debe realizar algunas de esas mismas tareas agregando código al contenedor. A continuación, se enumeran los aspectos importantes que debe tener en cuenta:

  • El código de contenedor que el Asistente para aplicaciones crea ya inicializa el subsistema OLE. No tendrá que cambiar ni agregar nada para esa compatibilidad.

  • Dondequiera que la clase base de una clase de documento sea COleDocument, cambie la clase base a COleServerDoc.

  • Invalide COleClientItem::CanActivate para evitar la edición de elementos en su lugar mientras el servidor mismo se usa para editar en contexto.

    Por ejemplo, el ejemplo OLE OCLIENT de MFC insertó un elemento creado por la aplicación contenedora/de servidor. Abra la aplicación OCLIENT y edite en contexto el elemento creado por la aplicación contenedora/de servidor. Al editar el elemento de la aplicación, decide que desea insertar un elemento creado por el ejemplo OLE HIERSVR de MFC. Para ello, no puede usar la activación en contexto. Debe abrir HIERSVR completamente para activar este elemento. Como la biblioteca MFC (Microsoft Foundation Class) no admite esta característica OLE, invalidar COleClientItem::CanActivate le permite comprobar esta situación e impedir que se produzca un error en tiempo de ejecución posible en la aplicación.

Si va a crear una aplicación y quiere que funcione como aplicación contenedora/de servidor, elija esa opción en el cuadro de diálogo Opciones OLE en el Asistente para aplicaciones y esta compatibilidad se creará automáticamente. Para más información, consulte el artículo Información general: Creación de un contenedor de controles ActiveX. Para información sobre los ejemplos de MFC, consulte Ejemplos de MFC.

Tenga en cuenta que no puede insertar una aplicación MDI en sí misma. Una aplicación contenedora/de servidor no se puede insertar en sí misma, a menos que sea una aplicación SDI.

La característica Vínculos a objetos insertados permite que un usuario cree un documento con un vínculo OLE a un objeto insertado dentro de la aplicación contenedora. Por ejemplo, en un procesador de texto, cree un documento que contenga una hoja de cálculo insertada. Si la aplicación admite vínculos a objetos insertados, podría pegar un vínculo a la hoja de cálculo contenida en el documento del procesador de texto. Esta característica permite que la aplicación utilice la información contenida en la hoja de cálculo sin saber dónde la obtuvo originalmente el procesador de texto.

  1. Derive la clase de documento de COleLinkingDoc en lugar de COleDocument.

  2. Cree un identificador de clase OLE (CLSID) para la aplicación con el generador de identificadores de clase que se incluye en las herramienta de desarrollo de OLE.

  3. Registre la aplicación con OLE.

  4. Cree un objeto COleTemplateServer como miembro de la clase de aplicación.

  5. En la función miembro InitInstance de la clase de aplicación, haga lo siguiente:

    • Llame a la función miembro COleTemplateServer del objeto para conectar el objeto ConnectTemplate a las plantillas de documento.

    • Llame a la función miembro COleTemplateServer::RegisterAll para registrar todos los objetos de clase con el sistema OLE.

    • Llame a COleTemplateServer::UpdateRegistry. El único parámetro para UpdateRegistry debe ser OAT_CONTAINER si la aplicación no se inicia con el modificador "/Embedded". Esto registra la aplicación como un contenedor que puede admitir vínculos a objetos insertados.

      Si la aplicación se inicia con el modificador "/Embedded", no debe mostrar su ventana principal, similar a una aplicación de servidor.

El ejemplo OLE OCLIENT de MFC implementa esta característica. Para un ejemplo de cómo se hace esto, consulte la función InitInstance en el archivo OCLIENT.CPP de esta aplicación de ejemplo.

Consulte también

Contenedores
Servidores