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 COleServerItem
de , 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, CServerItem
a 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
Dérivez une classe de
COleServerItem
.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 membreOnDraw
, utilisée pour afficher l'élément lorsque l'application serveur est active.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.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.