Dokumenty aktywne

Aktywne dokumenty rozszerzają technologię dokumentów złożonych OLE. Te rozszerzenia są udostępniane w postaci dodatkowych interfejsów, które zarządzają widokami, dzięki czemu obiekty mogą działać w kontenerach, a jednocześnie zachować kontrolę nad ich funkcjami wyświetlania i drukowania. Ten proces umożliwia wyświetlanie dokumentów zarówno w obcych ramkach (takich jak microsoft Office Binder lub Microsoft Internet Explorer) oraz w ramkach natywnych (takich jak własne porty widoku produktu).

W tej sekcji opisano wymagania funkcjonalne dotyczące aktywnych dokumentów. Aktywny dokument jest właścicielem zestawu danych i ma dostęp do magazynu, w którym można zapisywać i pobierać dane. Może tworzyć co najmniej jeden widok danych i zarządzać nim. Oprócz obsługi zwykłych interfejsów osadzania i aktywacji w miejscu dokumentów OLE aktywny dokument komunikuje się z możliwością tworzenia widoków za pośrednictwem programu IOleDocument. Za pomocą tego interfejsu kontener może poprosić o utworzenie (i ewentualnie wyliczenie) widoków, które może wyświetlić aktywny dokument. Za pomocą tego interfejsu aktywny dokument może również udostępniać różne informacje o sobie, takie jak obsługa wielu widoków lub złożonych prostokątów.

Poniżej przedstawiono IOleDocument interfejs. Należy pamiętać, że IEnumOleDocumentViews interfejs jest standardowym modułem wyliczania OLE dla IOleDocumentView* typów.

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);
    }

Każdy aktywny dokument musi mieć dostawcę ramek widoku z tym interfejsem. Jeśli dokument nie jest osadzony w kontenerze, sam aktywny serwer dokumentów musi podać ramkę widoku. Jednak gdy aktywny dokument jest osadzony w aktywnym kontenerze dokumentów, kontener udostępnia ramkę widoku.

Aktywny dokument może utworzyć co najmniej jeden typ widoków danych (na przykład normalny, konspekt , układ strony itd.). Widoki działają jak filtry, za pomocą których można zobaczyć dane. Nawet jeśli dokument ma tylko jeden typ widoku, nadal możesz chcieć obsługiwać wiele widoków jako sposób obsługi nowych funkcji okna (na przykład elementu Nowy okno w menu Okno w aplikacja pakietu Office lications).

Wymagania dotyczące aktywnych dokumentów

Aktywny dokument, który można wyświetlić w aktywnym kontenerze dokumentów, musi:

  • Użyj plików złożonych OLE jako mechanizmu przechowywania, implementując IPersistStorage.

  • Obsługa podstawowych funkcji osadzania dokumentów OLE, w tym funkcji Create From File. Wymaga to interfejsów IPersistFile, IOleObjecti IDataObject.

  • Obsługa jednego lub większej liczby widoków, z których każda może być aktywowana w miejscu. Oznacza to, że widoki muszą obsługiwać interfejsIOleDocumentView, a także interfejsy IOleInPlaceObject i IOleInPlaceActiveObject (przy użyciu interfejsów i IOleInPlaceFrame konteneraIOleInPlaceSite).

  • Obsługa standardowych aktywnych interfejsów IOleDocumentdokumentów , IOleCommandTargeti IPrint.

Znajomość tego, kiedy i jak używać interfejsów po stronie kontenera, jest implikowane w tych wymaganiach.

Wymagania dotyczące wyświetlania obiektów

Aktywny dokument może utworzyć co najmniej jeden widok danych. Widoki te są funkcjonalnie podobne do portów w określonej metodzie wyświetlania danych. Jeśli aktywny dokument obsługuje tylko jeden widok, aktywny dokument i ten pojedynczy widok można zaimplementować przy użyciu jednej klasy. IOleDocument::CreateView Zwraca wskaźnik interfejsu IOleDocumentView tego samego obiektu.

Aby być reprezentowane w aktywnym kontenerze dokumentów, składnik widoku musi obsługiwać IOleInPlaceObject i IOleInPlaceActiveObject oprócz :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);
    }

Każdy widok ma skojarzona lokacja widoku, która hermetyzuje ramkę widoku i port widoku (HWND i prostokątny obszar w tym oknie). Witryna uwidacznia tę funkcję, choć interfejs standardowy IOleInPlaceSite . Należy pamiętać, że istnieje możliwość posiadania więcej niż jednego portu widoku na jednym porcie HWND.

Zazwyczaj każdy typ widoku ma inną reprezentację drukowaną. W związku z tym widoki i odpowiadające im witryny widoku powinny implementować interfejsy drukowania, jeśli IPrint i IContinueCallback, odpowiednio. Ramka widoku musi negocjować z dostawcą widoku po IPrint rozpoczęciu drukowania, aby nagłówki, stopki, marginesy i powiązane elementy zostały poprawnie wydrukowane. Dostawca widoku powiadamia ramkę o zdarzeniach związanych z drukowaniem za pośrednictwem elementu IContinueCallback. Aby uzyskać więcej informacji na temat korzystania z tych interfejsów, zobacz Drukowanie programowe.

Należy pamiętać, że jeśli aktywny dokument obsługuje tylko jeden widok, aktywny dokument i ten pojedynczy widok można zaimplementować przy użyciu pojedynczej klasy betonowej. IOleDocument::CreateView po prostu zwraca wskaźnik interfejsu IOleDocumentView tego samego obiektu. Krótko mówiąc, nie jest konieczne, aby istnieją dwa oddzielne wystąpienia obiektów, gdy wymagany jest tylko jeden widok.

Obiekt widoku może być również obiektem docelowym polecenia. Zaimplementowanie IOleCommandTarget widoku umożliwia odbieranie poleceń pochodzących z interfejsu użytkownika kontenera (takich jak Nowe, Otwarte, Zapisz jako, Drukowanie w menu Plik oraz Kopiowanie, Wklej, Cofnij w menu Edycja ). Aby uzyskać więcej informacji, zobacz Obsługa komunikatów i Cele poleceń.

Zobacz też

Zawieranie dokumentów aktywnych