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 eineIStorage
Instanz bereitstellen.Unterstützen Sie die grundlegenden Einbettungsfeatures von OLE-Dokumenten, und erfordern das Implementieren
IOleClientSite
undIAdviseSink
Einbetten 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 werdenIOleInPlaceFrame
.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 DokumentschnittstellenIOleCommandTarget
implementieren undIContinueCallback
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 IContinueCallback
unterstü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.
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.