Delen via


Actieve documenten

Actieve documenten breiden de samengestelde documenttechnologie van OLE uit. Deze extensies worden aangeboden in de vorm van extra interfaces waarmee weergaven worden beheerd, zodat objecten in containers kunnen functioneren en toch de controle over hun weergave- en afdrukfuncties behouden blijven. Met dit proces kunt u documenten weergeven in externe frames (zoals Microsoft Office Binder of Microsoft Internet Explorer) en in systeemeigen frames (zoals de eigen weergavepoorten van het product).

In deze sectie worden de functionele vereisten voor actieve documenten beschreven. Het actieve document is eigenaar van een set gegevens en heeft toegang tot de opslag waar de gegevens kunnen worden opgeslagen en opgehaald. Het kan een of meer weergaven op de gegevens maken en beheren. Naast het ondersteunen van de gebruikelijke insluitings- en in-place activeringsinterfaces van OLE-documenten, communiceert het actieve document zijn vermogen om weergaven te maken via IOleDocument. Via deze interface kan de container vragen om de weergaven te maken (en mogelijk op te sommen) die door het actieve document kunnen worden weergegeven. Via deze interface kan het actieve document ook diverse informatie over zichzelf bieden, bijvoorbeeld of het meerdere weergaven of complexe rechthoeken ondersteunt.

Hier volgt de IOleDocument interface. Let op dat de IEnumOleDocumentViews-interface een standaard OLE-opsomming is voor IOleDocumentView* typen.

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);
    }

Elk actief document moet een provider voor weergaveframes met deze interface hebben. Als het document niet is ingesloten in een container, moet de actieve documentserver zelf het weergaveframe opgeven. Wanneer het actieve document echter is ingesloten in een actieve documentcontainer, biedt de container het weergaveframe.

Een actief document kan een of meer typen weergaven van de gegevens maken (bijvoorbeeld normaal, overzicht, pagina-indeling, enzovoort). Weergaven fungeren als filters waarmee de gegevens kunnen worden weergegeven. Zelfs als het document slechts één type weergave heeft, wilt u mogelijk nog steeds meerdere weergaven ondersteunen als een manier om nieuwe vensterfunctionaliteit te ondersteunen (bijvoorbeeld het item Nieuw venster in het menu Venster in Office-toepassingen).

Vereisten voor actieve documenten

Een actief document dat kan worden weergegeven in een actieve documentcontainer, moet:

  • Gebruik OLE Compound Files als opslagmechanisme door IPersistStorage te implementeren.

  • Ondersteuning voor de basisfuncties voor het insluiten van OLE-documenten, waaronder Create From File. Dit vereist de interfaces IPersistFile, IOleObjecten IDataObject.

  • Ondersteuning voor een of meer weergaven, die elk geschikt zijn voor in-place activering. Dat betekent dat de weergaven de interface IOleDocumentView moeten ondersteunen, evenals de interfaces IOleInPlaceObject en IOleInPlaceActiveObject, met behulp van de interfaces IOleInPlaceSite en IOleInPlaceFrame van de container.

  • Ondersteuning voor de standaard actieve documentinterfaces IOleDocument, IOleCommandTargeten IPrint.

Kennis van wanneer en hoe u de interfaces aan de containerzijde gebruikt, wordt in deze vereisten geïmpliceerd.

Vereisten voor weergaveobjecten

Een actief document kan een of meer weergaven van de gegevens maken. Functioneel fungeren deze weergaven als ingangen tot een specifieke methode om de gegevens weer te geven. Als een actief document slechts één weergave ondersteunt, kunnen het actieve document en die ene weergave worden geïmplementeerd met één klasse. IOleDocument::CreateView retourneert dezelfde interfacepointer van het IOleDocumentView object.

Om weergegeven te worden in een actieve documentcontainer, moet een weergaveonderdeel ondersteuning bieden voor IOleInPlaceObject en IOleInPlaceActiveObject naast 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);
    }

Elke weergave heeft een gekoppelde weergavesite, waarin het weergaveframe en de weergavepoort (HWND en een rechthoekig gebied in dat venster) worden ingekapseld. De site maakt deze functionaliteit beschikbaar via de standaardinterface IOleInPlaceSite . Houd er rekening mee dat het mogelijk is om meer dan één weergavepoort op één HWND te hebben.

Normaal gesproken heeft elk type weergave een andere afgedrukte weergave. Daarom moeten weergaven en de bijbehorende weergavesites respectievelijk de afdrukinterfaces implementeren als IPrint en IContinueCallback. Het weergaveframe moet onderhandelen met de weergaveprovider IPrint wanneer het afdrukken begint, zodat kopteksten, voetteksten, marges en gerelateerde elementen correct worden afgedrukt. De weergaveprovider meldt afdrukgerelateerde gebeurtenissen aan het framewerk via IContinueCallback. Zie Programmatisch afdrukken voor meer informatie over het gebruik van deze interfaces.

Houd er rekening mee dat als een actief document slechts één weergave ondersteunt, het actieve document en die ene weergave kunnen worden geïmplementeerd met één concrete klasse. IOleDocument::CreateView retourneert gewoon de interfacepointer van IOleDocumentView hetzelfde object. Kortom, het is niet nodig dat er twee afzonderlijke objectexemplaren zijn wanneer slechts één weergave vereist is.

Een weergaveobject kan ook een opdrachtdoel zijn. Door een weergave te implementeren IOleCommandTarget , kunnen opdrachten worden ontvangen die afkomstig zijn uit de gebruikersinterface van de container (zoals Nieuw, Openen, Opslaan als, Afdrukken in het menu Bestand ; en Kopiëren, Plakken, Ongedaan maken in het menu Bewerken ). Zie Berichtafhandeling en opdrachtdoelen voor meer informatie.

Zie ook

Actieve documentbeheersing