Dela via


Aktiva dokumentbehållare

Med en aktiv dokumentcontainer, till exempel Microsoft Office Binder eller Internet Explorer, kan du arbeta med flera dokument av olika programtyper inom en enda ram (i stället för att tvinga dig att skapa och använda flera programramar för varje dokumenttyp).

MFC har fullt stöd för aktiva dokumentcontainrar i COleDocObjectItem klassen. Du kan använda MFC-programguiden för att skapa en aktiv dokumentcontainer genom att markera kryssrutan Aktiv dokumentcontainer på sidan Sammansatt dokumentsupport i MFC-programguiden. Mer information finns i Skapa ett aktivt dokumentcontainerprogram.

Mer information om aktiva dokumentcontainrar finns i:

Containerkrav

Aktivt dokumentstöd i en aktiv dokumentcontainer innebär mer än bara gränssnittsimplementeringar: det kräver också kunskap om att använda gränssnitten för ett inneslutet objekt. Samma sak gäller för aktiva dokumenttillägg, där containern också måste veta hur tilläggsgränssnitten ska användas i de aktiva dokumenten.

En aktiv dokumentcontainer som integrerar aktiva dokument måste:

  • Kunna hantera objektlagring via IPersistStorage gränssnittet, dvs. den måste tillhandahålla en IStorage instans till varje aktivt dokument.

  • Implementera grundläggande inbäddningsfunktioner för OLE-dokument, vilket nödvändiggör "site"-objekt (ett per dokument eller inbäddning) som implementerar IOleClientSite och IAdviseSink.

  • Stöd för aktivering på plats av inbäddade objekt eller aktiva dokument. Containerns platsobjekt måste implementera IOleInPlaceSite och containerns ramobjekt måste förse IOleInPlaceFrame.

  • Stöd aktiva dokumentens tillägg genom att implementera IOleDocumentSite för att möjliggöra att containern kan kommunicera med dokumentet. Om du vill kan containern implementera de aktiva dokumentgränssnitten IOleCommandTarget och IContinueCallback hämta enkla kommandon som att skriva ut eller spara.

Ramobjektet, vyobjekten och containerobjektet kan eventuellt implementeras IOleCommandTarget för att stödja sändning av vissa kommandon, enligt beskrivningen i Kommandomål. Visnings- och containerobjekt kan också implementera IPrint och IContinueCallback, som stöd för programmeringsutskrift, enligt beskrivningen i Programmatisk utskrift.

Följande bild visar de konceptuella relationerna mellan en container och dess komponenter (till vänster) och det aktiva dokumentet och dess vyer (till höger). Det aktiva dokumentet hanterar lagring och data, och vyn visar eller kan också skriva ut dessa data. Gränssnitt i fetstil är de som krävs för aktivt dokumentdeltagande; de som är både fetstilta och kursiverade är valfria. Alla andra gränssnitt krävs.

Aktiva dokumentcontainergränssnitt.

Ett dokument som endast stöder en enda vy kan implementera både vy- och dokumentkomponenterna (dvs. motsvarande gränssnitt) i en enda betongklass. Dessutom kan en containerplats som bara stöder en vy i taget kombinera dokumentwebbplatsen och visningsplatsen till en enda betongplatsklass. Containerns ramobjekt måste dock förbli distinkt, och containerns dokumentkomponent ingår bara här för att ge en fullständig bild av arkitekturen. Det påverkas inte av den aktiva dokument inneslutningsarkitekturen.

Dokumentwebbplatsobjekt

I den aktiva dokument inneslutningsarkitekturen är en dokumentwebbplats samma som ett klientplatsobjekt i OLE-dokument med tillägget av IOleDocument gränssnittet:

interface IOleDocumentSite : IUnknown
{
    HRESULT ActivateMe(IOleDocumentView *pViewToActivate);
}

Dokumentwebbplatsen är konceptuellt containern för ett eller flera "visa webbplats"-objekt. Varje visningswebbplatsobjekt är associerat med enskilda visningsobjekt för dokumentet som hanteras av dokumentwebbplatsen. Om containern bara stöder en enda vy per dokumentsida kan den implementera dokumentsidan och visningssidan med en enda konkret klass.

Visa webbplatsobjekt

En containers visningswebbplatsobjekt hanterar visningsutrymmet för en viss vy av ett dokument. Förutom att stödja standardgränssnittet IOleInPlaceSite implementerar en visningsplats IContinueCallback vanligtvis även programmatisk utskriftskontroll. (Observera att visningsobjektet aldrig frågar efter IContinueCallback så att det faktiskt kan implementeras på alla objekt som containern önskar.)

En container som stöder flera vyer måste kunna skapa flera visningswebbplatsobjekt på dokumentwebbplatsen. Detta ger varje vy separata aktiverings- och inaktiveringstjänster som tillhandahålls via IOleInPlaceSite.

Ramobjekt

Containerns ramobjekt är för det mesta samma ram som används för aktivering på plats i OLE-dokument, dvs. den som hanterar förhandlingar i menyn och verktygsfältet. Ett visningsobjekt har åtkomst till det här ramobjektet via IOleInPlaceSite::GetWindowContext, vilket även ger åtkomst till containerobjektet som representerar containerdokumentet (som kan hantera förhandlingar på verktygsfält på fönsternivå och innesluten objektuppräkning).

En aktiv dokumentcontainer kan utöka ramen genom att lägga till IOleCommandTarget. På så sätt kan den ta emot kommandon som har sitt ursprung i det aktiva dokumentets användargränssnitt på samma sätt som det här gränssnittet kan tillåta att en container skickar samma kommandon (till exempel Nytt fil, Öppna, Spara som, Skriv ut; Redigera Kopiera, Klistra in, Ångra och andra) till ett aktivt dokument. Mer information finns i Kommandomål.

Se även

Aktiv dokumentinnehållning