Active Document-Container

Ein aktiver Dokumentcontainer, z. B. Microsoft Office Binder oder Internet Explorer, ermöglicht es Ihnen, mit mehreren Dokumenten verschiedener Anwendungstypen innerhalb eines einzelnen Frames zu arbeiten (anstatt sie zu erzwingen, mehrere Anwendungsframes für jeden Dokumenttyp zu erstellen und zu verwenden).

MFC bietet vollständige Unterstützung für aktive Dokumentcontainer in der COleDocObjectItem Klasse. Sie können den MFC-Anwendungs-Assistenten verwenden, um einen aktiven Dokumentcontainer zu erstellen, indem Sie das Kontrollkästchen "Aktiver Dokumentcontainer" auf der Seite " Verbunddokumentunterstützung " des MFC-Anwendungs-Assistenten aktivieren. Weitere Informationen finden Sie unter Erstellen einer aktiven Dokumentcontaineranwendung.

Weitere Informationen zu aktiven Dokumentcontainern finden Sie unter:

Containeranforderungen

Aktive Dokumentunterstützung in einem aktiven Dokumentcontainer impliziert mehr als nur Schnittstellenimplementierungen: Sie erfordert auch Kenntnisse über die Verwendung der Schnittstellen eines enthaltenen Objekts. Das gleiche gilt für aktive Dokumenterweiterungen, bei denen der Container auch wissen muss, wie diese Erweiterungsschnittstellen für die aktiven Dokumente selbst verwendet werden.

Ein aktiver Dokumentcontainer, der aktive Dokumente integriert, muss:

  • Sie kann objektspeichern über die IPersistStorage Schnittstelle verarbeiten, d. h. sie muss für jedes aktive Dokument eine IStorage Instanz bereitstellen.

  • Unterstützen Sie die grundlegenden Einbettungsfeatures von OLE-Dokumenten, und erfordern das Implementieren IOleClientSite und IAdviseSinkEinbetten von "Site"-Objekten (eins pro Dokument oder Einbettung).

  • Unterstützung der direkten Aktivierung eingebetteter Objekte oder aktiver Dokumente. Die Websiteobjekte des Containers müssen implementiert werden IOleInPlaceSite , und das Frameobjekt des Containers muss bereitgestellt werden IOleInPlaceFrame.

  • Unterstützen Sie die Erweiterungen der aktiven Dokumente, indem Sie implementieren IOleDocumentSite , um den Mechanismus für den Container für die Kommunikation mit dem Dokument bereitzustellen. Optional kann der Container die aktiven Dokumentschnittstellen IOleCommandTarget implementieren und IContinueCallback einfache Befehle wie drucken oder speichern.

Das Frameobjekt, die Ansichtsobjekte und das Containerobjekt können optional implementiert werden IOleCommandTarget , um die Verteiler bestimmter Befehle zu unterstützen, wie in Befehlszielen beschrieben. Ansichts- und Containerobjekte können optional auch programmgesteuertes Drucken implementieren IPrint und IContinueCallbackunterstützen, wie unter "Programmgesteuertes Drucken" beschrieben.

Die folgende Abbildung zeigt die konzeptionellen Beziehungen zwischen einem Container und seinen Komponenten (links) und dem aktiven Dokument und seinen Ansichten (rechts). Das aktive Dokument verwaltet Speicher und Daten, und die Ansicht zeigt diese Daten an oder druckt diese Daten optional. Schnittstellen fett formatiert sind diejenigen, die für die aktive Dokumentteilnahme erforderlich sind; diese fett und kursiv sind optional. Alle anderen Schnittstellen sind erforderlich.

Active document container interfaces.

Ein Dokument, das nur eine einzelne Ansicht unterstützt, kann sowohl die Ansichts- als auch dokumentkomponenten (d. h. die entsprechenden Schnittstellen) in einer einzelnen konkreten Klasse implementieren. Darüber hinaus kann eine Containerwebsite, die jeweils nur eine Ansicht unterstützt, die Dokumentwebsite und die Ansichtswebsite in einer einzigen konkreten Websiteklasse kombinieren. Das Frameobjekt des Containers muss jedoch erneut Standard sein, und die Dokumentkomponente des Containers ist lediglich hier enthalten, um ein vollständiges Bild der Architektur zu geben; sie ist nicht von der aktiven Dokumenteindämmungsarchitektur betroffen.

Dokumentwebsiteobjekte

In der aktiven Dokumenteindämmungsarchitektur ist eine Dokumentwebsite mit einem Clientwebsiteobjekt in OLE-Dokumenten mit dem Hinzufügen der IOleDocument Schnittstelle identisch:

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

Die Dokumentwebsite ist konzeptionell der Container für ein oder mehrere "View Site"-Objekte. Jedes Ansichtswebsiteobjekt ist einzelnen Ansichtsobjekten des dokuments zugeordnet, das von der Dokumentwebsite verwaltet wird. Wenn der Container nur eine einzelne Ansicht pro Dokumentwebsite unterstützt, kann er die Dokumentwebsite und die Ansichtswebsite mit einer einzelnen konkreten Klasse implementieren.

Websiteobjekte anzeigen

Das Ansichtswebsiteobjekt eines Containers verwaltet den Anzeigebereich für eine bestimmte Ansicht eines Dokuments. Neben der Unterstützung der Standardschnittstelle IOleInPlaceSite implementiert eine Ansichtswebsite IContinueCallback im Allgemeinen auch programmgesteuerte Drucksteuerungen. (Beachten Sie, dass das Ansichtsobjekt niemals abfragen IContinueCallback kann, damit es tatsächlich für jedes Objekt implementiert werden kann, das der Container wünscht.)

Ein Container, der mehrere Ansichten unterstützt, muss in der Lage sein, mehrere Ansichtswebsiteobjekte innerhalb der Dokumentwebsite zu erstellen. Dies stellt jede Ansicht mit separaten Aktivierungs- und Deaktivierungsdiensten bereit, wie durch diese bereitgestellt IOleInPlaceSite.

Rahmenobjekt

Das Frameobjekt des Containers ist in den meisten Fällen derselbe Frame, der für die direkte Aktivierung in OLE-Dokumenten verwendet wird, d. h. der, der die Menü- und Symbolleistenverhandlung behandelt. Ein Ansichtsobjekt hat Zugriff auf dieses Frameobjekt IOleInPlaceSite::GetWindowContext, das auch Zugriff auf das Containerobjekt bietet, das das Containerdokument darstellt (das die Aushandlung auf Symbolleistenebene und die enthaltene Objektenumeration verarbeiten kann).

Ein aktiver Dokumentcontainer kann den Frame durch Hinzufügen erweitern IOleCommandTarget. Auf diese Weise können Sie Befehle empfangen, die auf der Benutzeroberfläche des aktiven Dokuments auf dieselbe Weise stammen, wie diese Schnittstelle es einem Container ermöglichen kann, dieselben Befehle zu senden (z. B. "Datei neu", "Öffnen", "Speichern unter", "Drucken"; Bearbeiten Sie "Kopieren", "Einfügen", "Rückgängig" und "Andere") in ein aktives Dokument. Weitere Informationen finden Sie unter Command Targets.

Siehe auch

Aktive Dokumente-Container