Conteneurs de documents actifs
Un conteneur de documents actif, tel que Microsoft Bureau Binder ou Internet Explorer, vous permet d’utiliser plusieurs documents de types d’applications différents dans un cadre unique (au lieu de vous forcer à créer et utiliser plusieurs images d’application pour chaque type de document).
MFC fournit une prise en charge complète des conteneurs de documents actifs dans la COleDocObjectItem
classe. Vous pouvez utiliser l’Assistant Application MFC pour créer un conteneur de documents actif en sélectionnant la zone case activée conteneur de documents actif dans la page Prise en charge des documents composés de l’Assistant Application MFC. Pour plus d’informations, consultez Création d’une application de conteneur de documents actif.
Pour plus d’informations sur les conteneurs de documents actifs, consultez :
Configuration requise pour les conteneurs
La prise en charge des documents actifs dans un conteneur de documents actif implique plus que de simples implémentations d’interface : elle nécessite également une connaissance de l’utilisation des interfaces d’un objet contenu. La même chose s’applique aux extensions de document actives, où le conteneur doit également savoir comment utiliser ces interfaces d’extension sur les documents actifs eux-mêmes.
Un conteneur de documents actif qui intègre des documents actifs doit :
Être capable de gérer le stockage d’objets via l’interface
IPersistStorage
, autrement dit, elle doit fournir uneIStorage
instance à chaque document actif.Prendre en charge les fonctionnalités d’incorporation de base des documents OLE, nécessitant des objets « site » (un par document ou incorporation) qui implémentent
IOleClientSite
etIAdviseSink
.Prise en charge de l’activation sur place d’objets incorporés ou de documents actifs. Les objets de site du conteneur doivent implémenter
IOleInPlaceSite
et l’objet frame du conteneur doit fournirIOleInPlaceFrame
.Prenez en charge les extensions des documents actifs en implémentant
IOleDocumentSite
pour fournir le mécanisme permettant au conteneur de communiquer avec le document. Si vous le souhaitez, le conteneur peut implémenter les interfacesIOleCommandTarget
de document actives etIContinueCallback
récupérer des commandes simples telles que l’impression ou l’enregistrement.
L’objet frame, les objets d’affichage et l’objet conteneur peuvent éventuellement être implémentés IOleCommandTarget
pour prendre en charge la répartition de certaines commandes, comme indiqué dans Les cibles de commande. Les objets d’affichage et de conteneur peuvent également implémenter IPrint
et IContinueCallback
, éventuellement, prendre en charge l’impression par programmation, comme indiqué dans l’impression par programmation.
La figure suivante montre les relations conceptuelles entre un conteneur et ses composants (à gauche) et le document actif et ses vues (à droite). Le document actif gère le stockage et les données, et l’affichage affiche ou imprime éventuellement ces données. Les interfaces en gras sont celles requises pour la participation active au document ; ces caractères gras et italiques sont facultatifs. Toutes les autres interfaces sont requises.
Un document qui prend en charge un seul affichage peut implémenter à la fois les composants d’affichage et de document (c’est-à-dire leurs interfaces correspondantes) sur une seule classe concrète. En outre, un site conteneur qui ne prend en charge qu’une seule vue à la fois peut combiner le site de document et le site d’affichage en une seule classe de site concrète. Toutefois, l’objet frame du conteneur doit rester distinct et le composant de document du conteneur est simplement inclus ici pour donner une image complète de l’architecture ; elle n’est pas affectée par l’architecture d’endiguement du document actif.
Objets de site de documents
Dans l’architecture de confinement de document active, un site de document est identique à un objet de site client dans OLE Documents avec l’ajout de l’interface IOleDocument
:
interface IOleDocumentSite : IUnknown
{
HRESULT ActivateMe(IOleDocumentView *pViewToActivate);
}
Le site de document est conceptuellement le conteneur d’un ou plusieurs objets « afficher le site ». Chaque objet de site d’affichage est associé à des objets d’affichage individuels du document géré par le site de document. Si le conteneur ne prend en charge qu’une seule vue par site de document, il peut implémenter le site de document et le site d’affichage avec une seule classe concrète.
Afficher les objets de site
L’objet de site d’affichage d’un conteneur gère l’espace d’affichage d’une vue particulière d’un document. En plus de prendre en charge l’interface standard IOleInPlaceSite
, un site d’affichage implémente IContinueCallback
également pour le contrôle d’impression par programmation. (Notez que l’objet d’affichage ne demande IContinueCallback
jamais pour qu’il puisse réellement être implémenté sur n’importe quel objet souhaité par le conteneur.)
Un conteneur qui prend en charge plusieurs vues doit être en mesure de créer plusieurs objets de site d’affichage dans le site de document. Cela fournit chaque vue avec des services d’activation et de désactivation distincts tels qu’ils sont fournis via IOleInPlaceSite
.
Cadrer sur l’objet
L’objet frame du conteneur est, pour la plupart, le même frame utilisé pour l’activation sur place dans OLE Documents, autrement dit celui qui gère le menu et la négociation de la barre d’outils. Un objet d’affichage a accès à cet objet frame via IOleInPlaceSite::GetWindowContext
, qui fournit également l’accès à l’objet conteneur représentant le document conteneur (qui peut gérer la négociation de barre d’outils au niveau du volet et l’énumération d’objet autonome).
Un conteneur de documents actif peut augmenter le cadre en ajoutant IOleCommandTarget
. Cela lui permet de recevoir des commandes qui proviennent de l’interface utilisateur du document actif de la même façon que cette interface peut permettre à un conteneur d’envoyer les mêmes commandes (par exemple, Fichier nouveau, Ouvrir, Enregistrer sous, Imprimer ; Modifiez copier, coller, annuler et autres) dans un document actif. Pour plus d’informations, consultez Cibles de commande.