Partager via


Documents actifs

Les documents actifs étendent la technologie de document composite OLE.Ces extensions sont fournis sous la forme d'interfaces supplémentaires qui gèrent les vues, afin que les objets puissent fonctionner dans des conteneurs mais conserver le contrôle de leur affichage et impression s'exécute.Ce processus permet d'afficher des documents dans les frames étrangers (tels que Classeur Microsoft Office ou Microsoft Internet Explorer) et dans les frames natifs (tels que les propres ports de la vue du produit).

Cette section décrit spécifications pour les documents actifsfonctionnel.Le document actif possède un jeu de données et a accès au stockage où les données peuvent être stockées et extraites.Elle peut créer et gérer un ou plusieurs vues sur ses données.En plus de prendre en charge l'incorporation et les interfaces habituelles d'activation sur place des documents OLE, le document actif communique sa capacité de créer des affichages via IOleDocument.- Cette interface, le conteneur peut demander à créer (et énumérer probablement) les vues que le document actif peut afficher.- Cette interface, le document actif peut également fournir de diverses informations à propos de lui-même, comme s'il prend en charge plusieurs affichages ou rectangles complexes.

Voici l'interface d' IOleDocument .Notez que l'interface d' IEnumOleDocumentViews est OLE énumérateur standard pour les types d' IOleDocumentView * .

interface IOleDocument : IUnknown

{

HRESULT CreateView(

[in] IOleInPlaceSite *pIPSite,

[in] IStream *pstm,

[in] DWORD dwReserved,

[out] IOleDocumentView **ppView);

HRESULT GetDocMiscStatus([out] DWORD *pdwStatus);

HRESULT EnumViews(

[out] IEnumOleDocumentViews **ppEnum,

[out] IOleDocumentView **ppView);

}

Chaque document actif doit avoir un fournisseur de frame de vue avec cette interface.Si le document n'est pas incorporé dans un conteneur, le serveur de document actif lui-même doit fournir le frame de vue.Toutefois, lorsque le document actif est incorporé dans un conteneur de documents actifs, le conteneur fournit le cadre de la vue.

Un document actif peut créer un ou plusieurs types de vues de ses données (par exemple, normale, plan, la disposition, etc.).Les vues se comportent comme des filtres par lesquels les données peuvent être affichées.Même si le document a un seul type de vue, vous pouvez souhaiter encore que prendre en charge plusieurs vues comme moyen de la fonctionnalité de prise en charge de la nouvelle fenêtre (par exemple, l'élément de Nouvelle fenêtre dans le menu Fenêtre dans les applications Office).

Spécifications pour les documents actifs

Un document actif qui peut être affiché dans un conteneur de documents actifs doit :

  • Utilisez les fichiers composés d'OLE comme mécanisme de stockage en implémentant IPersistStorage.

  • Prise en charge des fonctionnalités de base d'incorporation OLE de documents, y compris À partir d'un fichier.Cela nécessite les interfaces IPersistFile, IOleObject, et IDataObject.

  • Prenez en charge un ou plusieurs vues, capable de l'activation sur place.Autrement dit, les vues doivent prendre en charge l'interface IOleDocumentView ainsi que les interfaces IOleInPlaceObject et IOleInPlaceActiveObject (à l'aide de IOleInPlaceSite du conteneur et les interfaces d' IOleInPlaceFrame ).

  • Prise en charge des interfaces de document actif standard IOleDocument, IOleCommandTarget, et IPrint.

La connaissance de quand et comment utiliser les interfaces de conteneur-side est implicite dans ces spécifications.

Spécifications pour les objets de vue

Un document actif peut créer un ou plusieurs vues de ses données.Vue fonctionnel, ces vues sont semblables à des ports sur une méthode particulière pour afficher les données.Si un document actif prend en charge une seule vue unique, le document actif et cette vue unique peuvent être implémentés à l'aide d'une classe unique.IOleDocument::CreateView retourne du même le pointeur d'interface de IOleDocumentView objet.

Pour être représenté dans un conteneur de documents actifs, un composant de vue doit prendre en charge IOleInPlaceObject et IOleInPlaceActiveObject en plus de IOleDocumentView:

interface IOleDocumentView : IUnknown

{

HRESULT SetInPlaceSite([in] IOleInPlaceSite *pIPSite);

HRESULT GetInPlaceSite([out] IOleInPlaceSite **ppIPSite);

HRESULT GetDocument([out] IUnknown **ppunk);

[input_sync] HRESULT SetRect([in] LPRECT prcView);

HRESULT GetRect([in] LPRECT prcView);

[input_sync] HRESULT SetRectComplex(

[in] LPRECT prcView,

[in] LPRECT prcHScroll,

[in] LPRECT prcVScroll,

[in] LPRECT prcSizeBox);

HRESULT Show([in] BOOL fShow);

HRESULT UIActivate([in] BOOL fUIActivate);

HRESULT Open(void);

HRESULT CloseView([in] DWORD dwReserved);

HRESULT SaveViewState([in] IStream *pstm);

HRESULT ApplyViewState([in] IStream *pstm);

HRESULT Clone(

[in] IOleInPlaceSite *pIPSiteNew,

[out] IOleDocumentView **ppViewNew);

}

Chaque vue a un site de vue associée, qui encapsule le frame de la vue et le port d'affichage (HWND et une zone rectangulaire dans cette fenêtre).Le site expose cette fonctionnalité bien que l'interface standard d' IOleInPlaceSite .Notez qu'il est possible d'avoir plusieurs port d'affichage sur un HWND unique.

En général, chaque type de vue a une représentation imprimée différente.Par conséquent des vues et des sites correspondants de vue doivent implémenter les interfaces d'impression si IPrint et IContinueCallback, respectivement.Le frame de vue doit négocier avec le fournisseur de vue via IPrint lorsque imprimer commence, afin que les en-têtes, les pieds de page, les marges, et les éléments associés sont imprimés correctement.Le fournisseur de vue informe le frame des événements impression-mis en relation par IContinueCallback.Pour plus d'informations sur l'utilisation de ces interfaces, consultez Impression de programmation.

Notez que si un document actif prend en charge une seule vue unique, le document actif et que la vue peut être implémentée à l'aide d'une classe concrète unique.IOleDocument::CreateView retourne simplement du même le pointeur d'interface de IOleDocumentView objet.En résumé, il n'est pas nécessaire qu'il y a deux instances de l'objet distinctes lorsqu'une seule vue est requise.

Un objet de vue peut également être une cible de la commande.En implémentant IOleCommandTarget une vue peut recevoir des commandes qui proviennent de l'interface utilisateur du conteneur (telle que Nouveau, Ouvrir, Enregistrer sous, Imprimer dans le menu de Fichier ; et Copier, Coller, Undo dans le menu de Edit ).Pour plus d'informations, consultez Gestion des messages et cible de la commande.

Voir aussi

Concepts

Relation contenant-contenu de Document actif