Partager via


Documents actifs

Les documents actifs étendent la technologie de document composé d’OLE. Ces extensions sont fournies sous la forme d’interfaces supplémentaires qui gèrent les vues, afin que les objets puissent fonctionner dans des conteneurs et pourtant conserver le contrôle sur leurs fonctions d’affichage et d’impression. Ce processus permet d’afficher des documents à la fois dans des images étrangères (telles que Microsoft Office Binder ou Microsoft Internet Explorer) et dans des images natives (comme les ports d’affichage du produit).

Cette section décrit les exigences fonctionnelles pour les documents actifs. Le document actif possède un jeu de données et a accès au stockage où les données peuvent être enregistrées et récupérées. Il peut créer et gérer une ou plusieurs vues sur ses données. En plus de prendre en charge les interfaces d’incorporation et d’activation sur place habituelles des documents OLE, le document actif communique sa capacité à créer des vues via IOleDocument. Grâce à cette interface, le conteneur peut demander à créer (et éventuellement énumérer) les vues que le document actif peut afficher. Grâce à cette interface, le document actif peut également fournir des informations diverses sur elle-même, telles que si elle prend en charge plusieurs vues ou rectangles complexes.

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

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 cadre de vue avec cette interface. Si le document n’est pas incorporé dans un conteneur, le serveur de documents actif lui-même doit fournir le cadre d’affichage. Toutefois, lorsque le document actif est incorporé dans un conteneur de documents actif, le conteneur fournit le cadre d’affichage.

Un document actif peut créer un ou plusieurs types de vues de ses données (par exemple, normal, plan, mise en page, etc.). Les vues agissent comme des filtres dans lesquels les données peuvent être vues. Même si le document n’a qu’un seul type d’affichage, vous pouvez toujours prendre en charge plusieurs vues comme moyen de prendre en charge les nouvelles fonctionnalités de fenêtre (par exemple, l’élément Nouvelle fenêtre dans le menu Fenêtre dans les applications Office).

Configuration requise pour les documents actifs

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

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

  • Prise en charge des fonctionnalités d’incorporation de base de documents OLE, notamment créer à partir d’un fichier. Cela nécessite les interfaces IPersistFile, IOleObjectet IDataObject.

  • Prendre en charge une ou plusieurs vues, chacune avec la fonctionnalité d'activation en place. Autrement dit, les vues doivent prendre en charge l'interface IOleDocumentView ainsi que l'interface IOleInPlaceObject et IOleInPlaceActiveObject (à l'aide des interfaces IOleInPlaceSite et IOleInPlaceFrame du conteneur).

  • Prendre en charge les interfaces standard de document actives IOleDocument, IOleCommandTarget, et IPrint.

La connaissance du moment et de l’utilisation des interfaces côté conteneur est implicite dans ces exigences.

Configuration requise pour afficher les objets

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

Pour être représenté dans un conteneur de documents actif, un composant d’affichage doit prendre en charge IOleInPlaceObject et IOleInPlaceActiveObject en plus des éléments suivants 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 d’affichage associé, qui encapsule le cadre d’affichage et le port d’affichage (HWND et une zone rectangulaire dans cette fenêtre). Le site expose cette fonctionnalité via l'interface standard IOleInPlaceSite. Notez qu’il est possible d’avoir plusieurs ports d’affichage sur un seul HWND.

En règle générale, chaque type d’affichage a une représentation imprimée différente. Par conséquent les vues et les sites de correspondance de vue doivent implémenter les interfaces d'impression si IPrint et IContinueCallback, respectivement. Le cadre d’affichage doit négocier avec le fournisseur IPrint d’affichage lors de l’impression, afin que les en-têtes, les pieds de page, les marges et les éléments associés soient imprimés correctement. Le fournisseur d'affichage notifie le frame des événements liés à l'impression via IContinueCallback. Pour plus d’informations sur l’utilisation de ces interfaces, consultez Impression par programmation.

Notez que si un document actif prend uniquement en charge un seul affichage, le document actif et cet affichage unique peut être implémenté à l’aide d’une classe concrète unique. IOleDocument::CreateView retourne simplement le pointeur d’interface du IOleDocumentView même objet. En bref, il n’est pas nécessaire qu’il existe deux instances d’objet distinctes quand une seule vue est requise.

Un objet d’affichage peut également être une cible de commande. En implémentant IOleCommandTarget une vue, celle-ci peut recevoir des commandes qui proviennent de l’interface utilisateur du conteneur (par exemple Nouvelle, Ouvrir, Enregistrer sous, Imprimer dans le menu Fichier ; et Copier, Coller, Annuler dans le menu Édition). Pour plus d’informations, consultez Gestion des messages et cibles de commande.

Voir aussi

Contenu du document actif