Servidores: Elementos de servidor
Cuando un contenedor inicia un servidor para que un usuario pueda editar un elemento OLE insertado o vinculado, la aplicación de servidor crea un "elemento de servidor". El elemento de servidor, que es un objeto de una clase derivada de COleServerItem
, proporciona una interfaz entre el documento del servidor y la aplicación contenedora.
La clase COleServerItem
define varias funciones miembro reemplazables a las que llama OLE, generalmente en respuesta a las solicitudes del contenedor. Los elementos de servidor pueden representar parte del documento de servidor o del documento completo. Cuando se inserta un elemento OLE en el documento contenedor, el elemento del servidor representa todo el documento del servidor. Cuando el elemento OLE está vinculado, el elemento del servidor puede representar una parte del documento del servidor o todo el documento, dependiendo de si el vínculo es a una parte o al todo.
En el ejemplo HIERSVR, por ejemplo, la clase de elemento de servidor, CServerItem
, tiene un miembro que es un puntero a un objeto de la clase CServerNode
. El objeto CServerNode
es un nodo en el documento de la aplicación HIERSVR, que es un árbol. Cuando el objeto CServerNode
es el nodo raíz, el objeto CServerItem
representa todo el documento. Cuando el objeto CServerNode
es un nodo secundario, el objeto CServerItem
representa una parte del documento. Consulte el ejemplo OLE de MFC HIERSVR para obtener un ejemplo de esta interacción.
Implementación de elementos de servidor
Si usa el asistente de aplicaciones para generar un código de "inicio" para su aplicación, todo lo que tiene que hacer para incluir elementos de servidor en su código de inicio es elegir una de las opciones de servidor de la página Opciones OLE. Si va a agregar elementos de servidor a una aplicación existente, realice los siguientes pasos:
Para implementar un elemento de servidor
Derivar una clase de
COleServerItem
.En la clase derivada, invalide la función miembro
OnDraw
.El marco llama
OnDraw
para representar el elemento OLE en un metarchivo. La aplicación contenedora usa este metarchivo para representar el elemento. La clase de vista de la aplicación también tiene una función de miembroOnDraw
que se usa para representar el elemento cuando la aplicación del servidor está activa.Implemente una invalidación de
OnGetEmbeddedItem
para la clase de documento de servidor. Para obtener más información, consulte el artículo Servidores: Implementar documentos de servidor y el ejemplo OLE de MFC HIERSVR.Implemente la función miembro de la clase de elemento de servidor
OnGetExtent
. El marco llama a esta función para recuperar el tamaño del elemento. La implementación predeterminada no hace nada.
Sugerencia para la arquitectura de elemento de servidor
Como se indica en Implementación de elementos del servidor, las aplicaciones de servidor ser capaces de representar elementos tanto en la vista del servidor como en un metarchivo usado por la aplicación contenedora. En la arquitectura de aplicaciones de la biblioteca MFC, la función de miembro OnDraw
de la clase de vista representa el elemento cuando se está editando (consulte CView::OnDraw en la Referencia de la biblioteca de clases). El OnDraw
del elemento de servidor convierte el elemento en un metarchivo en todos los demás casos (consulte COleServerItem::OnDraw).
Puede evitar la duplicación de código escribiendo funciones auxiliares en la clase de documento de servidor y llamándolas desde las funciones OnDraw
en las clases de elemento de servidor y de vista. El ejemplo OLE de MFC HIERSVR usa esta estrategia: las funciones CServerView::OnDraw
y CServerItem::OnDraw
llaman a CServerDoc::DrawTree
para representar el elemento.
La vista y el elemento tienen funciones de miembro OnDraw
porque se dibujan en condiciones diferentes. La vista debe tener en cuenta factores como el zoom, el tamaño y la extensión de la selección, el recorte y los elementos de la interfaz de usuario, como las barras de desplazamiento. Por otro lado, el elemento de servidor siempre dibuja todo el objeto OLE.
Para obtener información, consulte CView::OnDraw, COleServerItem, COleServerItem::OnDraw y COleServerDoc::OnGetEmbeddedItem en la Referencia de la biblioteca de clases.