Sdílet prostřednictvím


Aktivní dokumenty

Poznámka:

Knihovna MFC (Microsoft Foundation Classes) se nadále podporuje. Už ale nepřidáme funkce ani aktualizujeme dokumentaci.

Aktivní dokumenty rozšiřují složenou technologii dokumentů OLE. Tato rozšíření jsou poskytována ve formě dalších rozhraní, která spravují zobrazení, aby objekty mohly fungovat v kontejnerech a přesto si zachovaly kontrolu nad jejich funkcemi zobrazení a tisku. Tento proces umožňuje zobrazit dokumenty jak v cizích snímcích (například Microsoft Office Binder nebo Microsoft Internet Explorer), tak v nativních rámcích (například v vlastních portech zobrazení produktu).

Tato část popisuje funkční požadavky pro aktivní dokumenty. Aktivní dokument vlastní sadu dat a má přístup k úložišti, kde se dají data ukládat a načítat. Může vytvářet a spravovat jedno nebo více zobrazení svých dat. Kromě podpory obvyklého vkládání a aktivace na místě rozhraní dokumentů OLE aktivní dokument oznamuje svou schopnost vytvářet zobrazení prostřednictvím IOleDocument. Prostřednictvím tohoto rozhraní může kontejner požádat o vytvoření (a případně vytvoření výčtu) zobrazení, která může aktivní dokument zobrazit. Prostřednictvím tohoto rozhraní může aktivní dokument také poskytovat různé informace o sobě, například zda podporuje více zobrazení nebo složitých obdélníků.

Následující je rozhraní IOleDocument. Všimněte si, že IEnumOleDocumentViews rozhraní je standardní enumerátor OLE pro IOleDocumentView* typy.

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

Každý aktivní dokument musí mít poskytovatele rámce zobrazení, který má toto rozhraní. Pokud dokument není vložený do kontejneru, musí samotný aktivní server dokumentů poskytnout rámec zobrazení. Pokud je však aktivní dokument vložen do kontejneru aktivního dokumentu, kontejner poskytuje rámec zobrazení.

Aktivní dokument může vytvořit jeden nebo více typů zobrazení svých dat (například normální, osnova, rozložení stránky atd.). Zobrazení fungují jako filtry, pomocí kterých je možné data zobrazit. I když má dokument jenom jeden typ zobrazení, můžete stále chtít podporovat více zobrazení jako prostředek pro podporu nových funkcí okna (například položku Nové okno v nabídce Okno v aplikacích Office).

Požadavky na aktivní dokumenty

Aktivní dokument, který se dá zobrazit v aktivním kontejneru dokumentů, musí:

  • Použijte složené soubory OLE jako svůj úložný mechanismus implementací IPersistStorage.

  • Podpora základních funkcí vkládání dokumentů OLE, včetně funkce Vytvořit ze souboru. To vyžaduje rozhraní IPersistFile, IOleObjecta IDataObject.

  • Podporuje jedno nebo více zobrazení, z nichž každé je schopné aktivace na místě. To znamená, že zobrazení musí podporovat rozhraní IOleDocumentView i rozhraní IOleInPlaceObject a IOleInPlaceActiveObject (pomocí rozhraní kontejneru IOleInPlaceSite a IOleInPlaceFrame).

  • Podpora standardních rozhraní aktivních IOleDocumentdokumentů , IOleCommandTargeta IPrint.

Znalost toho, kdy a jak používat rozhraní na straně kontejneru, se v těchto požadavcích předpokládá.

Požadavky na objekty zobrazení

Aktivní dokument může vytvořit jedno nebo více zobrazení svých dat. Funkčně jsou tato zobrazení jako porty na konkrétní metodu zobrazení dat. Pokud aktivní dokument podporuje pouze jedno zobrazení, je možné aktivní dokument a toto jedno zobrazení implementovat pomocí jedné třídy. IOleDocument::CreateView vrátí ukazatel rozhraní stejného objektu IOleDocumentView .

Aby byla reprezentována v rámci aktivního kontejneru dokumentů, musí komponenta zobrazení podporovat IOleInPlaceObject a IOleInPlaceActiveObject navíc 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);
    }

Každé zobrazení má přidružené místo zobrazení, které zapouzdřuje rám zobrazení a port zobrazení (HWND a obdélníkovou oblast v tomto okně). Web tuto funkci zveřejňuje prostřednictvím standardního IOleInPlaceSite rozhraní. Všimněte si, že na jednom HWND je možné mít více než jeden port zobrazení.

Každý typ zobrazení má obvykle jinou tištěnou reprezentaci. Zobrazení a příslušné zobrazené weby by proto měly implementovat rozhraní pro tisk, pokud IPrint a IContinueCallback, v odpovídajícím pořadí. Rámec zobrazení musí při zahájení tisku vyjednat se zprostředkovatelem zobrazení pomocí IPrint, aby se správně vytiskly záhlaví, zápatí, okraje a související prvky. Poskytovatel zobrazení oznámí rámečku o událostech souvisejících s tiskem prostřednictvím IContinueCallback. Další informace o použití těchto rozhraní naleznete v tématu Programový tisk.

Všimněte si, že pokud aktivní dokument podporuje pouze jedno zobrazení, pak aktivní dokument a toto jedno zobrazení lze implementovat pomocí jedné konkrétní třídy. IOleDocument::CreateView jednoduše vrátí ukazatel rozhraní stejného objektu IOleDocumentView . Stručně řečeno, není nutné, aby existovaly dvě samostatné instance objektů, pokud je vyžadováno pouze jedno zobrazení.

Objekt zobrazení může být také cílem příkazu. Implementace IOleCommandTarget zobrazení může přijímat příkazy, které pocházejí z uživatelského rozhraní kontejneru (například Nový, Otevřít, Uložit jako, Tisk v nabídce Soubor a Kopírovat, Vložit, Zpět v nabídce Upravit ). Další informace naleznete v tématu Zpracování zpráv a cíle příkazů.

Viz také

Kontejnment aktivního dokumentu