Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Met een actieve documentcontainer, zoals Microsoft Office Binder of Internet Explorer, kunt u werken met verschillende documenten van verschillende toepassingstypen binnen één frame (in plaats van dat u meerdere toepassingsframes voor elk documenttype hoeft te maken en gebruiken).
MFC biedt volledige ondersteuning voor actieve documentcontainers in de COleDocObjectItem klasse. U kunt de wizard MFC-toepassing gebruiken om een actieve documentcontainer te maken door het selectievakje Actieve documentcontainer in te schakelen op de pagina Ondersteuning van samengestelde documenten van de wizard MFC-toepassing. Zie Een actieve documentcontainertoepassing maken voor meer informatie.
Zie voor meer informatie over actieve documentcontainers:
Containervereisten
Actieve documentondersteuning in een actieve documentcontainer impliceert meer dan alleen interface-implementaties: het vereist ook kennis van het gebruik van de interfaces van een ingesloten object. Hetzelfde geldt voor actieve documentextensies, waarbij de container ook moet weten hoe deze uitbreidingsinterfaces op de actieve documenten zelf moeten worden gebruikt.
Een actieve documentcontainer die actieve documenten integreert, moet:
Kan objectopslag verwerken via de
IPersistStorageinterface, dat wil gezegd, het moet eenIStorageexemplaar voor elk actief document leveren.Ondersteuning voor de basisfuncties voor het insluiten van OLE-documenten, waarbij 'site'-objecten (één per document of insluiten) nodig zijn die implementeren
IOleClientSiteenIAdviseSink.Ondersteuning voor ter plaatse activering van ingesloten objecten of actieve documenten. De container moet zijn siteobjecten implementeren via
IOleInPlaceSiteen zijn frameobject beschikbaar stellen viaIOleInPlaceFrame.Ondersteun de extensies van actieve documenten door
IOleDocumentSitete implementeren om het mechanisme te bieden voor de container om met het document te communiceren. Optioneel kan de container de actieve documentinterfacesIOleCommandTargetimplementeren enIContinueCallbackeenvoudige opdrachten ophalen, zoals afdrukken of opslaan.
Het frameobject, de weergaveobjecten en het containerobject kunnen eventueel worden geïmplementeerd IOleCommandTarget ter ondersteuning van de verzending van bepaalde opdrachten, zoals besproken in opdrachtdoelen. Weergave- en containerobjecten kunnen ook optioneel implementeren IPrint en IContinueCallback, ter ondersteuning van programmatisch afdrukken, zoals besproken in Programmatisch afdrukken.
In de volgende afbeelding ziet u de conceptuele relaties tussen een container en de bijbehorende onderdelen (links) en het actieve document en de weergaven (rechts). Het actieve document beheert de opslag en gegevens en in de weergave worden die gegevens weergegeven of optioneel afgedrukt. Interfaces vetgedrukt zijn vereist voor actieve documentdeelname; vet en cursief zijn optioneel. Alle andere interfaces zijn vereist.
Een document dat slechts één weergave ondersteunt, kan zowel de weergave- als documentonderdelen (de bijbehorende interfaces) op één concrete klasse implementeren. Bovendien kan een containersite die slechts één weergave tegelijk ondersteunt, de documentsite en de weergavesite combineren tot één concrete siteklasse. Het frameobject van de container moet echter uniek blijven en het documentonderdeel van de container wordt hier alleen opgenomen om een volledig beeld te geven van de architectuur; dit wordt niet beïnvloed door de actieve documentbesluitingsarchitectuur.
Documentsiteobjecten
In de actieve documentbesluitingsarchitectuur is een documentsite hetzelfde als een clientsiteobject in OLE-documenten met toevoeging van de IOleDocument interface:
interface IOleDocumentSite : IUnknown
{
HRESULT ActivateMe(IOleDocumentView *pViewToActivate);
}
De documentsite is conceptueel de container voor een of meer 'siteweergave'-objecten. Elk siteobject voor de weergave is gekoppeld aan afzonderlijke weergaveobjecten van het document dat wordt beheerd door de documentsite. Als de container slechts één weergave per documentsite ondersteunt, kan deze de documentsite en de weergavesite met één concrete klasse implementeren.
Siteobjecten weergeven
Met het weergavesiteobject van een container wordt de weergaveruimte voor een bepaalde weergave van een document beheerd. Naast de ondersteuning van de standaardinterface IOleInPlaceSite wordt een weergavesite in het algemeen ook geïmplementeerd IContinueCallback voor programmatische afdrukbesturing. (Houd er rekening mee dat het weergaveobject nooit query's uitvoert IContinueCallback , zodat het daadwerkelijk kan worden geïmplementeerd op elk object dat de container wenst.)
Een container die ondersteuning biedt voor meerdere weergaven, moet meerdere weergavesiteobjecten binnen de documentsite kunnen maken. Dit biedt elke weergave afzonderlijke activerings- en deactiveringsservices zoals geleverd via IOleInPlaceSite.
Frameobject
Het frameobject van de container is voor het grootste deel hetzelfde frame dat wordt gebruikt voor in-place activering in OLE-documenten, dat wil gezegd, het frame dat menu- en werkbalkonderhandeling afhandelt. Een weergaveobject heeft toegang tot dit frameobject via IOleInPlaceSite::GetWindowContext, dat ook toegang biedt tot het containerobject dat het containerdocument vertegenwoordigt (waarmee onderhandelingen over de werkbalk op deelvensterniveau en de opsomming van ingesloten objecten kunnen worden afgehandeld).
Een actieve documentcontainer kan het frame uitbreiden door het toe te voegen IOleCommandTarget. Hierdoor kunnen opdrachten worden ontvangen die afkomstig zijn van de gebruikersinterface van het actieve document op dezelfde manier als deze interface kan toestaan dat een container dezelfde opdrachten verzendt (zoals Bestand nieuw, Openen, Opslaan als, Afdrukken; Bewerk Kopiëren, Plakken, Ongedaan maken en anderen) naar een actief document. Zie Opdrachtdoelen voor meer informatie.