Freigeben über


Aktive Dokumente

Hinweis

Die Microsoft Foundation Classes (MFC)-Bibliothek wird weiterhin unterstützt. Wir fügen jedoch keine Features mehr hinzu oder aktualisieren die Dokumentation.

Aktive Dokumente erweitern die Verbunddokumenttechnologie von OLE. Diese Erweiterungen werden in Form zusätzlicher Schnittstellen bereitgestellt, die Ansichten verwalten, sodass Objekte innerhalb von Containern funktionieren und dennoch die Kontrolle über ihre Anzeige- und Druckfunktionen behalten können. Mit diesem Prozess können Dokumente sowohl in Fremdframes (z. B. microsoft Office Binder oder Microsoft Internet Explorer) als auch in systemeigenen Frames (z. B. den eigenen Ansichtsports des Produkts) angezeigt werden.

In diesem Abschnitt werden die funktionalen Anforderungen für aktive Dokumente beschrieben. Das aktive Dokument besitzt eine Datenmenge und hat Zugriff auf den Speicher, an dem die Daten gespeichert und abgerufen werden können. Sie kann eine oder mehrere Ansichten ihrer Daten erstellen und verwalten. Zusätzlich zur Unterstützung der üblichen Einbettungs- und In-Place-Aktivierungsschnittstellen von OLE-Dokumenten kommuniziert das aktive Dokument seine Fähigkeit, Ansichten durch IOleDocumentzu erstellen. Durch diese Schnittstelle kann der Container anfordern, die Ansichten zu erstellen (und möglicherweise aufzuzählen), die vom aktiven Dokument angezeigt werden können. Über diese Schnittstelle kann das aktive Dokument auch verschiedene Informationen über sich selbst bereitstellen, z. B. ob es mehrere Ansichten oder komplexe Rechtecke unterstützt.

Im Folgenden sehen Sie die IOleDocument Schnittstelle. Beachten Sie, dass es sich bei der IEnumOleDocumentViews Schnittstelle um einen standardmäßigen OLE-Enumerator für 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);
    }

Jedes aktive Dokument muss über einen Ansichtsrahmenanbieter mit dieser Schnittstelle verfügen. Wenn das Dokument nicht in einen Container eingebettet ist, muss der aktive Dokumentserver selbst den Ansichtsrahmen bereitstellen. Wenn das aktive Dokument jedoch in einen aktiven Dokumentcontainer eingebettet ist, stellt der Container den Ansichtsrahmen bereit.

Ein aktives Dokument kann einen oder mehrere Arten von Ansichten seiner Daten erstellen (z. B. normal, Gliederung, Seitenlayout usw.). Ansichten wirken wie Filter, durch die die Daten angezeigt werden können. Auch wenn das Dokument nur einen Ansichtstyp aufweist, möchten Sie möglicherweise immer noch mehrere Ansichten unterstützen, um neue Fensterfunktionen zu unterstützen (z. B. das Element "Neues Fenster " im Menü " Fenster " in Office-Anwendungen).

Anforderungen für aktive Dokumente

Ein aktives Dokument, das in einem aktiven Dokumentcontainer angezeigt werden kann, muss:

  • Verwenden Sie OLE-Zusammengesetzte-Dateien als Speichermechanismus, indem Sie IPersistStorage implementieren.

  • Unterstützen Sie die grundlegenden Einbettungsfeatures von OLE-Dokumenten, einschließlich "Aus Datei erstellen". Dies erfordert die Schnittstellen IPersistFile, IOleObjectund IDataObject.

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

  • Unterstützen Sie die standardmäßigen aktiven Dokumentschnittstellen IOleDocument, IOleCommandTargetund IPrint.

Kenntnisse darüber, wann und wie die containerseitigen Schnittstellen verwendet werden, werden in diesen Anforderungen impliziert.

Anforderungen für Ansichtsobjekte

Ein aktives Dokument kann eine oder mehrere Ansichten seiner Daten erstellen. Funktionell sind diese Ansichten wie Ports zu einer bestimmten Methode zum Anzeigen der Daten. Wenn ein aktives Dokument nur eine einzelne Ansicht unterstützt, kann das aktive Dokument und diese einzelne Ansicht mithilfe einer einzelnen Klasse implementiert werden. IOleDocument::CreateView gibt den Schnittstellenzeiger desselben IOleDocumentView Objekts zurück.

Um innerhalb eines aktiven Dokumentcontainers dargestellt zu werden, muss eine Ansichtskomponente IOleInPlaceObject und IOleInPlaceActiveObject zusätzlich zu IOleDocumentView unterstützen.

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 hat eine zugehörige View-Site, die den Frame der Ansicht und den Port der Ansicht (HWND und einen rechteckigen Bereich in diesem Fenster) kapselt. Die Website stellt diese Funktionalität über die Standardschnittstelle IOleInPlaceSite bereit. Beachten Sie, dass es möglich ist, mehrere Viewports auf einem einzelnen HWND zu verwenden.

In der Regel weist jeder Ansichtstyp eine andere gedruckte Darstellung auf. Daher sollten Views und die entsprechenden View-Sites die Druckschnittstellen implementieren, wenn IPrint bzw. IContinueCallback. Der View-Frame muss über IPrint mit dem Anbieter der Ansicht verhandeln, wenn der Druckvorgang beginnt, damit Header, Footer, Ränder und verwandte Elemente korrekt gedruckt werden. Der Anbieter der Ansicht benachrichtigt den Frame über druckbezogene Ereignisse über IContinueCallback. Weitere Informationen zur Verwendung dieser Schnittstellen finden Sie unter Programmatic Printing.

Beachten Sie, dass, wenn ein aktives Dokument nur eine einzelne Ansicht unterstützt, das aktive Dokument und diese einzelne Ansicht mithilfe einer einzelnen konkreten Klasse implementiert werden können. IOleDocument::CreateView gibt einfach den Schnittstellenzeiger desselben IOleDocumentView Objekts zurück. Kurz gesagt, es ist nicht erforderlich, dass zwei separate Objektinstanzen vorhanden sind, wenn nur eine Ansicht erforderlich ist.

Ein Ansichtsobjekt kann auch ein Befehlsziel sein. Durch die Implementierung von IOleCommandTarget kann eine Ansicht Befehle empfangen, die ihren Ursprung in der Benutzeroberfläche des Containers haben (wie z. B. Neu, Öffnen, Speichern unter, Drucken im Menü Datei; und Kopieren, Einfügen, Rückgängig im Menü Bearbeiten). Weitere Informationen finden Sie unter Nachrichtenverarbeitung und Befehlsziele.

Siehe auch

Aktive Dokumenteindämmung