Kontejnery pro aktivní dokument
Aktivní kontejner dokumentů, například systém Microsoft Office Binder nebo Internet Explorer, umožňuje pracovat s několika dokumenty různých typů aplikací v rámci jednoho rámce (namísto vynucení vytvoření a použití více rámců aplikace pro každý typ dokumentu).
MFC poskytuje úplnou podporu aktivních kontejnerů dokumentů ve COleDocObjectItem
třídě. Průvodce aplikací MFC můžete použít k vytvoření aktivního kontejneru dokumentů zaškrtnutím políčka Aktivní kontejner dokumentů na stránce Podpora složeného dokumentu Průvodce aplikací MFC. Další informace naleznete v tématu Vytvoření aktivní aplikace kontejneru dokumentů.
Další informace o aktivních kontejnerech dokumentů najdete tady:
Požadavky na kontejnery
Podpora aktivních dokumentů v kontejneru aktivních dokumentů znamená více než jen implementace rozhraní: vyžaduje také znalost používání rozhraní obsaženého objektu. Totéž platí pro aktivní rozšíření dokumentů, kde kontejner musí také vědět, jak tato rozhraní rozšíření používat v samotných aktivních dokumentech.
Aktivní kontejner dokumentů, který integruje aktivní dokumenty, musí:
Být schopen zpracovat úložiště objektů prostřednictvím
IPersistStorage
rozhraní, to znamená, že musí poskytnoutIStorage
instanci pro každý aktivní dokument.Podpora základních funkcí vkládání dokumentů OLE, které jsou nezbytné pro objekty "site" (jeden na dokument nebo vkládání), které implementují
IOleClientSite
aIAdviseSink
.Podpora místní aktivace vložených objektů nebo aktivních dokumentů Objekty lokality kontejneru musí implementovat
IOleInPlaceSite
a objekt rámce kontejneru musí poskytnoutIOleInPlaceFrame
.Rozšíření aktivních dokumentů můžete podporovat implementací
IOleDocumentSite
, aby kontejneru poskytl mechanismus pro komunikaci s dokumentem. Volitelně může kontejner implementovat aktivní rozhraní dokumentů aIContinueCallback
vyzvednout jednoduché příkazyIOleCommandTarget
, jako je tisk nebo uložení.
Objekt rámce, objekty zobrazení a objekt kontejneru mohou volitelně implementovat IOleCommandTarget
pro podporu odesílání určitých příkazů, jak je popsáno v cílech příkazů. Objekty zobrazení a kontejneru mohou také volitelně implementovat IPrint
a IContinueCallback
podporovat programový tisk, jak je popsáno v programovém tisku.
Následující obrázek znázorňuje koncepční vztahy mezi kontejnerem a jeho komponentami (vlevo) a aktivním dokumentem a jeho zobrazením (vpravo). Aktivní dokument spravuje úložiště a data a zobrazení zobrazí nebo volitelně vytiskne tato data. Rozhraní tučným písmem jsou ta, která se vyžadují pro aktivní účast na dokumentech; tyto tučné písmo a kurzíva jsou volitelné. Všechna ostatní rozhraní jsou povinná.
Dokument, který podporuje pouze jedno zobrazení, může implementovat zobrazení i komponenty dokumentu (tj. jejich odpovídající rozhraní) v jedné konkrétní třídě. Kromě toho může lokalita kontejneru, která podporuje vždy jen jedno zobrazení, kombinovat web dokumentu a web zobrazení do jedné konkrétní třídy webu. Objekt rámce kontejneru však musí zůstat odlišný a komponenta dokumentu kontejneru je zde pouze zahrnuta, aby poskytla úplný přehled o architektuře; na ni nemá vliv architektura zahrnutí aktivního dokumentu.
Objekty webu dokumentu
V architektuře zahrnutí aktivních dokumentů je lokalita dokumentu stejná jako objekt klientské lokality v dokumentech OLE s přidáním IOleDocument
rozhraní:
interface IOleDocumentSite : IUnknown
{
HRESULT ActivateMe(IOleDocumentView *pViewToActivate);
}
Web dokumentu je koncepčně kontejner pro jeden nebo více objektů zobrazení webu. Každý objekt webu zobrazení je přidružený k jednotlivým objektům zobrazení dokumentu spravovaného webem dokumentu. Pokud kontejner podporuje pouze jedno zobrazení na web dokumentu, může implementovat web dokumentu a web zobrazení s jednou konkrétní třídou.
Zobrazení objektů webu
Objekt webu pro zobrazení kontejneru spravuje místo pro zobrazení určitého zobrazení dokumentu. Kromě podpory standardního IOleInPlaceSite
rozhraní web zobrazení také obecně implementuje IContinueCallback
pro programový ovládací prvek tisku. (Všimněte si, že objekt zobrazení se nikdy dotazuje IContinueCallback
, aby se ve skutečnosti mohl implementovat u jakéhokoli objektu, který kontejner chce.)
Kontejner, který podporuje více zobrazení, musí být schopen vytvořit více objektů webu zobrazení v rámci webu dokumentu. Toto zobrazení poskytuje samostatné aktivační a deaktivační služby poskytované prostřednictvím IOleInPlaceSite
.
Rámeček – objekt
Objekt rámce kontejneru je ve většině případů stejný rámeček, který se používá pro místní aktivaci v dokumentech OLE, tj. ten, který zpracovává nabídky a vyjednávání panelu nástrojů. Objekt zobrazení má přístup k tomuto objektu rámce prostřednictvím IOleInPlaceSite::GetWindowContext
, který také poskytuje přístup k objektu kontejneru představujícího dokument kontejneru (který může zpracovávat vyjednávání panelu nástrojů na úrovni podokna a obsažené výčty objektů).
Aktivní kontejner dokumentů může rozšířit rámec přidáním IOleCommandTarget
. To umožňuje přijímat příkazy pocházející z uživatelského rozhraní aktivního dokumentu stejným způsobem, jakým toto rozhraní umožňuje kontejneru odesílat stejné příkazy (například File New, Open, Save As, Print; Upravit kopírování, vložení, vrácení zpět a další) do aktivního dokumentu. Další informace naleznete v tématu Cíle příkazů.