Implementación de la activación de In-Place

La activación local permite a un usuario interactuar con un objeto incrustado sin salir del documento contenedor. Cuando un usuario activa el objeto, una barra de menús compuesta que comprende elementos de las barras de menús de la aplicación contenedora y de la aplicación de servidor reemplaza a la barra de menús principal del contenedor. Por lo tanto, los comandos y las características de ambas aplicaciones están disponibles para el usuario, incluida la ayuda contextual para el objeto activo. Cuando un usuario comienza a trabajar con alguna parte que no es de objeto del documento, el objeto se desactiva, lo que hace que el menú original del documento contenedor reemplace el menú compuesto.

Esta funcionalidad fue originalmente por el nombre de la edición local. El nombre se cambió porque la edición es solo una manera de que un usuario interactúe con un objeto en ejecución. Los clips de sonido, por ejemplo, se pueden escuchar en lugar de editarlos. Los clips de vídeo se pueden ver en lugar de editarlos. La activación en contexto es especialmente adecuada en el caso de clips de vídeo porque les permite ejecutarse en contexto, sin llamar a una ventana independiente. Esto podría ser crítico si el vídeo fuera a verse, por ejemplo, junto con datos de texto adyacentes en el documento contenedor.

La implementación de la activación local es estrictamente opcional para las aplicaciones de contenedor y servidor. OLE sigue admitiendo el modelo en el que la activación de un objeto hace que la aplicación de servidor abra una ventana independiente. Los objetos vinculados siempre se abren en una ventana independiente para resaltar que residen en un documento independiente.

La activación en contexto comienza con el objeto en respuesta a una llamada IOleObject::D oVerb desde su contenedor. Normalmente, esta llamada se produce en respuesta a un usuario haciendo doble clic en el objeto o seleccionando un comando (verbo) en el menú Editar de la aplicación contenedora.

La ventana local recibe la entrada de teclado y mouse mientras el objeto incrustado está activo. Cuando un usuario selecciona comandos en la barra de menús compuestas, los mensajes de menú asociados y comandos se envían al contenedor o la aplicación de objeto, dependiendo de cuál sea el propietario del menú desplegable determinado seleccionado. La entrada por medio de las reglas, barras de herramientas o adornos de marco de un objeto va directamente al objeto incrustado, que posee estas ventanas.

Un objeto incrustado activado en contexto permanece activo hasta que el contenedor lo desactiva en respuesta a la entrada del usuario o el objeto abandona voluntariamente el estado activo, como podría hacer un clip de vídeo, por ejemplo. Un usuario puede desactivar un objeto haciendo clic dentro del documento contenedor, pero fuera de la ventana de activación local del objeto, o simplemente haciendo clic en otro objeto. Sin embargo, un objeto activado en contexto permanece activo, pero si el usuario hace clic en la barra de título del contenedor, la barra de desplazamiento o, en particular, la barra de menús.

Puede implementar un servidor in-place-activation-object como un servidor en proceso (DLL) o un servidor local (EXE). En ambos casos, la barra de menús compuesta contiene elementos (normalmente menús desplegables) tanto del servidor como de los procesos de contenedor. En el caso de un servidor en proceso, la ventana de activación local es simplemente otra ventana secundaria en la jerarquía de ventanas del contenedor, recibiendo su entrada a través del bomba de mensajes de la aplicación contenedora.

En el caso de un servidor local, la ventana de activación local pertenece al proceso de aplicación del servidor del objeto incrustado, pero su ventana primaria pertenece al contenedor. La entrada de la ventana de activación local aparece en la cola de mensajes del servidor y la envía el bucle de mensajes del servidor. Las bibliotecas OLE son responsables de verlo que los mensajes y comandos de menú se envían correctamente.

Documentos compuestos