Dokumenty aktywne
Aktywne dokumenty rozszerzenie technologii OLE złożonych dokumentów.Rozszerzenia te są przedstawiane w formie dodatkowych interfejsów, które zarządzają widoki, dzięki czemu obiekty mogą funkcjonować w pojemnikach i jeszcze zachować kontrolę nad ich wyświetlania i funkcji drukowania.Ten proces umożliwia wyświetlanie dokumentów zarówno w ramkach obcego (na przykład Microsoft Office Binder lub programu Microsoft Internet Explorer), jak i w ramkach macierzystego (na przykład widok portów tego produktu).
W tej sekcji opisano funkcjonalnych wymagania dotyczące dokumentów active.Aktywny dokument posiada zestaw danych i ma dostęp do magazynu, gdzie można zapisać i źródło danych.To można tworzyć i zarządzać jeden lub więcej widoków na jego danych.Oprócz obsługi zwykle osadzanie i aktywacja w miejscu interfejsy OLE dokumentów, aktywny dokument komunikuje się jego zdolność do tworzenia widoków przez IOleDocument.Za pomocą tego interfejsu pojemnika można poprosić o tworzenie (i ewentualnie wyliczyć) widoków, które można wyświetlić w aktywnym dokumencie.Za pomocą tego interfejsu aktywnego dokumentu oferuje również różne informacje o sobie, takie jak czy obsługuje wiele widoków lub złożonych prostokątów.
Oto IOleDocument interfejsu.Należy zauważyć, że IEnumOleDocumentViews interfejs jest standardowy moduł wyliczający 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ć dostawcy ramki widoku z tego interfejsu.Jeśli dokument nie jest osadzona w kontenerze, samego serwera aktywnego dokumentu należy podać ramki widoku.Jednak gdy aktywny dokument jest osadzony w kontenerem aktywnego dokumentu, kontener zawiera ramki widoku.
Aktywny dokument można utworzyć jeden lub więcej rodzajów Widoki swoje dane (na przykład normalne, konspekt, układ strony i tak dalej).Widoki działają jak filtry, przez które dane są widoczne.Nawet, jeśli dokument zawiera tylko jeden typ widoku, może nadal chcesz obsługiwać wiele widoków jako środków wsparcia nowe funkcje okna (na przykład Nowego okna przedmiotu okna menu w aplikacjach pakietu Office).
Wymagania dotyczące dokumentów aktywnych
Muszą aktywnego dokumentu, która może być wyświetlana w pojemniku aktywnego dokumentu:
Używać plików złożone OLE jako jego mechanizm przechowywania z zastosowaniem IPersistStorage.
Obsługuje podstawowe funkcje osadzania OLE dokumentów, łącznie z Utwórz z pliku.Wymaga to interfejsy IPersistFile, IOleObject, i IDataObject.
Obsługuje jeden lub więcej widoków, z których każdy jest w stanie aktywacji w miejscu.Oznacza to, że widoki musi obsługiwać interfejs IOleDocumentView jak również interfejsy IOleInPlaceObject i IOleInPlaceActiveObject (przy użyciu kontenera IOleInPlaceSite i IOleInPlaceFrame interfejsów).
Obsługują interfejsy standardowy dokument active IOleDocument, IOleCommandTarget, i IPrint.
Wiedza, kiedy i jak używać interfejsów kontenera po stronie jest implikowana w tych wymagań.
Wymagania dotyczące obiektów widoku
Aktywny dokument można utworzyć jeden lub więcej widoków danych.Od strony funkcjonalnej te widoki są podobne do portów na konkretnej metody wyświetlania danych.Jeśli aktywny dokument obsługuje tylko jeden widok, aktywny dokument i że jednym widoku mogą być realizowane za pomocą jedną klasę.IOleDocument::CreateView zwraca ten sam obiekt IOleDocumentView wskaźnika interfejsu.
Jest reprezentowana w obrębie kontenerem aktywnego dokumentu, musi obsługiwać składnika Widok IOleInPlaceObject i IOleInPlaceActiveObject na 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 skojarzony Wyświetl witrynę, która hermetyzuje ramki widoku i port widoku (HWND i prostokątny obszar w tym oknie).Witryny udostępnia funkcję, to jednak standard IOleInPlaceSite interfejsu.Należy pamiętać, że można mieć więcej niż jeden port widok na pojedynczy HWND.
Zazwyczaj każdy rodzaj widoku ma różnych reprezentacji drukowanych.Stąd widoki i odpowiadające im lokacje widoku należy implementować interfejsów drukowania Jeśli IPrint i IContinueCallback, odpowiednio.Ramki widoku musi negocjować z dostawcy widoku za pomocą IPrint kiedy drukowanie rozpoczyna się, tak aby nagłówki, stopki, marginesy i powiązane elementy są drukowane poprawnie.Dostawcy widoku powiadamia ramki zdarzeń związanych z drukowaniem za pośrednictwem IContinueCallback.Aby uzyskać więcej informacji dotyczących stosowania tych interfejsów, zobacz Drukowanie programowe.
Należy zauważyć, że jeśli aktywny dokument obsługuje tylko jeden widok, następnie aktywny dokument i że jednym widoku można zaimplementować za pomocą pojedynczego klasa konkretna.IOleDocument::CreateView po prostu zwraca ten sam obiekt IOleDocumentView wskaźnika interfejsu.Innymi słowy nie jest konieczne, który istnieć dwa wystąpienia oddzielny obiekt gdy wymagany jest tylko jeden widok.
Wyświetl obiekt może być również docelowej polecenia.Implementując IOleCommandTarget widok może otrzymywać poleceń, które pochodzą z kontenera interfejsu użytkownika (takich jak Nowy, Otwórz, Zapisz jako, wydruku na pliku menu; and Copy, Paste, Undo on the Edit menu).Aby uzyskać dodatkowe informacje, zobacz Obsługa komunikatów i obiekty docelowe poleceń.