Serveurs : éléments du serveur

Lorsqu’un conteneur lance un serveur afin qu’un utilisateur puisse modifier un élément OLE incorporé ou lié, l’application serveur crée un « élément serveur ». L’élément de serveur, qui est un objet d’une classe dérivée COleServerItemde , fournit une interface entre le document serveur et l’application conteneur.

La classe COleServerItem définit plusieurs fonctions membres substituables appelées par OLE, généralement en réponse aux requêtes du conteneur. Les éléments du serveur peuvent représenter une partie du document serveur ou le document entier. Lorsqu'un élément d'OLE est incorporé dans le document conteneur, l'élément du serveur représente le document serveur tout entier. Lorsque l'élément OLE est lié, l'élément du serveur peut représenter une partie du document serveur ou le document entier, selon que la liaison est faite vers une partie ou vers le tout.

Dans l’exemple HIERSVR , par exemple, la classe d’élément de serveur, CServerItema un membre qui est un pointeur vers un objet de la classe CServerNode. L’objet CServerNode est un nœud dans le document de l’application HIERSVR, qui est une arborescence. Lorsque l’objet CServerNode est le nœud racine, l’objet CServerItem représente l’ensemble du document. Lorsque l’objet CServerNode est un nœud enfant, l’objet CServerItem représente une partie du document. Consultez l’exemple OLE MFC OLE HIERSVR pour obtenir un exemple de cette interaction.

Implémentation d’éléments de serveur

Si vous utilisez l’Assistant Application pour générer le code de démarrage pour votre application, tout ce que vous devez effectuer pour inclure les éléments du serveur dans votre code de démarrage est de choisir l’une des options de serveur à partir de la page Options OLE. Si vous ajoutez des éléments du serveur à une application existante, procédez comme suit :

Pour implémenter un élément du serveur

  1. Dérivez une classe de COleServerItem.

  2. Dans votre classe dérivée, substituez la fonction membre OnDraw.

    Le framework appelle OnDraw pour afficher l'élément OLE dans un métafichier. L'application conteneur utilise ce métafichier pour afficher l'élément. La classe d'affichage de votre application a également une fonction membre OnDraw, utilisée pour afficher l'élément lorsque l'application serveur est active.

  3. Implémentez une substitution de OnGetEmbeddedItem pour votre classe de document serveur. Pour plus d’informations, consultez l’article Serveurs : implémentation de documents serveur et de l’exemple OLE MFC OLE HIERSVR.

  4. Implémentez la fonction membre OnGetExtent de la classe d'élément du serveur. Le framework appelle cette fonction pour extraire la taille de l'élément. L'implémentation par défaut n'exécute aucune opération.

Conseil pour l’architecture d’élément de serveur

Comme indiqué dans Implémentation d’éléments de serveur, les applications serveur doivent être en mesure de restituer des éléments à la fois dans la vue du serveur et dans un métafichier utilisé par l’application conteneur. Dans l’architecture d’application de la bibliothèque de classes Microsoft Foundation, la fonction membre de OnDraw la classe d’affichage affiche l’élément lorsqu’il est modifié (voir CView ::OnDraw dans la référence de la bibliothèque de classes). L’élément de serveur affiche l’élément OnDraw dans un métafichier dans tous les autres cas (voir COleServerItem ::OnDraw).

Vous pouvez éviter la duplication de code en écrivant des fonctions d'assistance dans la classe du document serveur et en les appelant à partir des fonctions OnDraw dans vos classes d'affichage et d'éléments du serveur. L’exemple OLE MFC OLE HIERSVR utilise cette stratégie : les fonctions CServerView::OnDraw et CServerItem::OnDraw les deux appels CServerDoc::DrawTree pour restituer l’élément.

La vue et l'élément ont tous deux des fonctions membres OnDraw car le dessin est effectué dans différentes conditions. L'affichage doit prendre en compte des facteurs tels que le zoom, la taille et l'extension de la sélection, la réduction et les éléments d'interface utilisateur tels que les barres de défilement. L'élément du serveur, en revanche, dessine toujours l'objet OLE entier.

Pour plus d’informations, consultez CView ::OnDraw, COleServerItem, COleServerItem ::OnDraw et COleServerDoc ::OnGetEmbeddedItem dans la référence de la bibliothèque de classes.

Voir aussi

Serveurs