Conteneurs : fonctionnalités avancées
Cet article décrit les étapes nécessaires pour intégrer des fonctionnalités avancées optionnelles dans des applications de conteneur existantes. Ces fonctionnalités sont les suivantes :
Une application conteneur/serveur est une application qui joue à la fois le rôle de conteneur et de serveur. Microsoft Word pour Windows en est un exemple. Vous pouvez inclure Word dans d'autres applications, vous pouvez également inclure des éléments dans Word pour les documents Windows. Le processus pour modifier votre application conteneur pour qu'elle soit à la fois un conteneur et un serveur complet (vous ne pouvez pas créer d'application combinaison conteneur/mini-serveur) est semblable au processus de création d'un serveur complet.
L’article Serveurs : Implémentation d’un serveur répertorie plusieurs tâches requises pour implémenter une application serveur. Si vous convertissez une application conteneur en une application conteneur/serveur, vous devrez effectuer certaines de ces mêmes tâches, en ajoutant du code au conteneur. Ce qui suit répertorie les éléments importants à prendre en compte :
Le code de conteneur créé par l'Assistant Application initialise déjà le sous-système OLE. Vous n'aurez pas besoin de modifier ni d'ajouter quoi que ce soit pour ce support.
Si l'emplacement de la classe de base d'une classe de document est
COleDocument
, remplacez la classe de base parCOleServerDoc
.Remplacez
COleClientItem::CanActivate
pour éviter de modifier des éléments en place lorsque le serveur lui-même permet de modifier sur place.Par exemple, l’exemple OLE MFC OCLIENT a incorporé un élément créé par votre application conteneur/serveur. Ouvrez l'application OCLIENT et modifiez sur place l'élément créé par votre application conteneur/serveur. Lors de la modification de l’élément de votre application, vous décidez d’incorporer un élément créé par l’exemple OLE MFC HIERSVR. Pour cela, vous ne pouvez pas utiliser l'activation en place. Vous devez entièrement ouvrir HIERSVR pour activer cet élément. Comme la bibliothèque MFC ne prend pas en charge cette fonctionnalité OLE, remplacer
COleClientItem::CanActivate
vous permet de contrôler cette situation et d’empêcher une erreur d’exécution possible dans votre application.
Si vous créez une application et souhaitez qu'elle s'exécute en tant qu'application conteneur/serveur, choisissez l'option dans la boîte de dialogue Options OLE dans l'Assistant Application et la prise en charge est créée automatiquement. Pour plus d’informations, consultez l’article Vue d’ensemble : Création d’un conteneur de contrôle ActiveX. Pour plus d’informations sur les exemples MFC, consultez exemples MFC.
Notez que vous ne pouvez pas insérer une application MDI en elle-même. Une application qui est conteneur/serveur ne peut pas être insérée dans elle-même à moins d'être une application SDI.
Les liens vers la fonction d'objets incorporés permet à un utilisateur de créer un document avec un lien OLE vers un objet incorporé dans votre application conteneur. Par exemple, créez un document dans un traitement de texte contenant une feuille de calcul incorporée. Si votre application prend en charge les liens vers des objets incorporés, elle pourrait également coller un lien vers la feuille de calcul contenue dans le document de traitement de texte. Cette fonctionnalité permet à votre application d'utiliser les informations contenues dans la feuille de calcul sans savoir où le traitement de texte l'a initialement obtenue.
Dérivez votre classe de document à partir de
COleLinkingDoc
au lieu deCOleDocument
.Créez un ID de classe OLE (CLSID) pour votre application à l’aide du générateur d’ID de classe inclus avec les outils de développement OLE.
Enregistrez l'application avec OLE.
Créez un objet
COleTemplateServer
en tant que membre de la classe d'application.Dans la fonction membre
InitInstance
de la classe d'application, procédez comme suit :Connectez votre objet
COleTemplateServer
à vos modèles de document en appelant la fonction membreConnectTemplate
de l'objet.Appelez la
COleTemplateServer::RegisterAll
fonction membre pour inscrire tous les objets de classe auprès du système OLE.Appelez
COleTemplateServer::UpdateRegistry
. Le seul paramètre àUpdateRegistry
OAT_CONTAINER si l’application n’est pas lancée avec le commutateur « /Embedded ». Cela enregistre l'application en tant que conteneur capable de prendre en charge les liens vers des objets incorporés.Si l’application est lancée avec le commutateur « /Embedded », elle ne doit pas afficher sa fenêtre principale, similaire à une application serveur.
L’exemple OCLIENT MFC implémente cette fonctionnalité. Pour obtenir un exemple de la façon dont cela est effectué, consultez la InitInstance
fonction dans L’OCLIENT . Fichier CPP de cet exemple d’application.