Active Documents

Active Documents erweitern die Verbunddokument Technologie von OLE.Diese Erweiterungen werden in Form von zusätzlichen Schnittstellen bereitgestellt, die Ansichten verwalten, sodass Objekte in Containern arbeiten und doch ihre Kontrolle über Druckfunktionen Anzeige- und verwalten können.Dieser Prozess ist es möglich, Dokumente in der fremden Frame (z. B. Microsoft Office-Binder oder Microsoft Internet Explorer) sowie in einem systemeigenen Rahmen angezeigt werden sollen (z. B. eigene Viewporten des Produkts).

Dieser Abschnitt beschreibt funktionale Anforderungen für Active Documents.Das aktive Dokument besitzt einen Satz von Daten und hat Zugriff auf den Speicher, in dem die Daten gespeichert und von dem sie abgerufen werden können.Es kann ein oder mehrere Ansichten der Daten erstellen und verwalten.Zusätzlich zum Sichern der üblichen Schnittstellen und der Einbettung der direkte Aktivierung von OLE-Dokumenten wird das aktive Dokument seine Fähigkeit von Ansichten, mit IOleDocument zu erstellen.Über diese Schnittstelle kann der Container anfordern, (und ggf.) auflisten Ansichten zu erstellen, die das aktive Dokument anzeigen kann.Über diese Schnittstelle kann das aktive Dokument selbst über verschiedene Informationen bereitstellen, z. B., ob es mehrere Ansichten oder komplexe Rechtecke unterstützt.

Im Folgenden sind die IOleDocument -Schnittstelle.Beachten Sie, dass die IEnumOleDocumentViews-Schnittstelle ein Enumerator des Standardwerts für OLE IOleDocumentView *-Typen handelt.

interface IOleDocument : IUnknown

{

HRESULT CreateView(

[in] IOleInPlaceSite *pIPSite,

[in] IStream *pstm,

[in] DWORD dwReserved,

[out] IOleDocumentView **ppView);

HRESULT GetDocMiscStatus([out] DWORD *pdwStatus);

HRESULT EnumViews(

[out] IEnumOleDocumentViews **ppEnum,

[out] IOleDocumentView **ppView);

}

Jeder aktive Dokument muss ein Anbieter Skinframes Ansicht dieser Schnittstelle verfügen.Wenn das Dokument nicht innerhalb eines Containers eingebettet ist, muss der Active Document-Server auch die Skinframes bereitstellen.Wenn jedoch das aktive Dokument in einem Active Document-Container eingebettet ist, stellt der Container die Skinframes.

Ein aktives Dokument kann einen oder mehrere Typen Ansichten seiner Daten (z. B. normal, Gliederung, Seitenlayout usw.) erstellen.Ansichten verhalten sich wie Filter, durch die die Daten angezeigt werden können.Selbst wenn das Dokument nur einen Typ Ansicht verfügt, sollten Sie immer noch mehrere Ansichten als Mittel der Sicherung der Funktionalität des neuen Fensters (z. B. das Neues Fenster -Element im Menü Fenster in Office-Anwendungen) unterstützen.

Anforderungen für Active Documents

Ein aktives Dokument, das in einem Active Document-Container angezeigt werden kann, muss:

  • Verwenden von Verbunddateien OLE als Speichermechanismus, indem Sie IPersistStorage implementieren.

  • Sichern Sie die grundlegenden Features von OLE-Dokumenten Mithilfe von eingebetteten, einschließlich Create From File.Dies erfordert die Schnittstellen IPersistFile, IOleObject und IDataObject.

  • Unterstützen Sie eine oder mehrere Ansichten, von denen jede die direkte Aktivierung unterstützt.Das heißt, müssen die Ansichten die Schnittstelle IOleDocumentView sowie die Schnittstellen IOleInPlaceObject und IOleInPlaceActiveObject unterstützen (unter Verwendung des IOleInPlaceSite Containers und der IOleInPlaceFrame-Schnittstellen).

  • Sichern der aktiven StandardDokumentoberflächen IOleDocument, IOleCommandTarget und IPrint.

Kenntnisse darüber, wann und wie die Container Seite Schnittstellen ist in diesen Anforderungen verwendet wird.

Anforderungen für Ansichts-Objekte

Ein aktives Dokument kann eine oder mehrere Ansichten der Daten erstellen.Funktionell sind diese Ansichten wie Anschlüsse eine bestimmte Methode zum Anzeigen der Daten.Wenn ein aktives Dokument nur eine Ansicht unterstützt, können das aktive Dokument und diese einzelne Ansicht mit einer einzelnen Klasse implementiert werden.IOleDocument::CreateView gibt denselben IOleDocumentView-Schnittstellenzeiger des Objekts zurück.

So unterstützen innerhalb eines Active Document-Container dargestellt werden soll, muss eine Ansichtskomponente IOleInPlaceObject und IOleInPlaceActiveObject zusätzlich zu IOleDocumentView:

interface IOleDocumentView : IUnknown

{

HRESULT SetInPlaceSite([in] IOleInPlaceSite *pIPSite);

HRESULT GetInPlaceSite([out] IOleInPlaceSite **ppIPSite);

HRESULT GetDocument([out] IUnknown **ppunk);

[input_sync] HRESULT SetRect([in] LPRECT prcView);

HRESULT GetRect([in] LPRECT prcView);

[input_sync] HRESULT SetRectComplex(

[in] LPRECT prcView,

[in] LPRECT prcHScroll,

[in] LPRECT prcVScroll,

[in] LPRECT prcSizeBox);

HRESULT Show([in] BOOL fShow);

HRESULT UIActivate([in] BOOL fUIActivate);

HRESULT Open(void);

HRESULT CloseView([in] DWORD dwReserved);

HRESULT SaveViewState([in] IStream *pstm);

HRESULT ApplyViewState([in] IStream *pstm);

HRESULT Clone(

[in] IOleInPlaceSite *pIPSiteNew,

[out] IOleDocumentView **ppViewNew);

}

Jede Ansicht verfügt über eine zugeordnete Ansicht anzeigen, die die Site Skinframes und den Viewport kapselt (HWND und einen rechteckigen Bereich in diesem Fenster).Die Site macht diese Funktionalität über die Standard- IOleInPlaceSite -Schnittstelle.Beachten Sie, dass es möglich ist, mehr als einen Viewport auf einzelnen HWND haben.

Normalerweise verfügt jeder Typ Ansicht eine andere gedruckte Darstellung.Daher Ansichten und Aufrufsites anzeigen sollten die entsprechenden Schnittstellen zu implementieren und IPrint wenn IContinueCallback.Die Berechtigung Skinframes müssen mit dem Ansichtsanbieter von IPrint , wenn das Drucken aushandeln beginnt, sodass Kopfzeilen, Fußzeilen, Seitenränder und zugehörige Elemente ordnungsgemäß gedruckt werden.Der Ansichtsanbieter benachrichtigt den Rahmen von Druck-verknüpften von Ereignissen IContinueCallback.Weitere Informationen über die Verwendung dieser Schnittstellen finden Sie unter Programmgesteuerter Drucken.

Beachten Sie, dass, wenn ein aktives Dokument nur eine Ansicht unterstützt, wird das aktive Dokument und dass einzelne Ansicht mit einer einzelnen konkreten Klasse implementiert werden kann.IOleDocument::CreateView gibt lediglich den gleichen IOleDocumentView-Schnittstellenzeiger des Objekts zurück.Kurz gesagt ist es nicht notwendig, dass zwei verschiedene Objektinstanzen wird, wenn nur eine Ansicht erforderlich ist.

Ein Ansichtsobjekt kann kein Befehlsziel werden.Mithilfe von IOleCommandTarget implementiert, kann eine Ansicht Befehle empfangen, die aus der Benutzeroberfläche des Containers stammen (z. B. Neu, Öffnen, Speichern unter, Drucken im Menü Datei . Kopieren, und Einfügen, Rückgängig auf dem Bearbeiten Menü).Weitere Informationen finden Sie unter Nachrichtenverarbeitungs- und Befehls-Ziele.

Siehe auch

Konzepte

Active Document-Einschluss