共用方式為


主動式文件

主動式文件擴充 OLE 的複合文件技術。 這些擴充功能物件可以在容器內作用,卻仍然保有對顯示和列印功能的控制項,以便管理檢視表的其他介面的形式提供。 這項程序可讓您可以在外部索引的畫面格 (例如,Microsoft Office 繫結器或 Microsoft Internet Explorer) 和 (例如產品自己的檢視連接埠) 的原生框架中顯示的文件。

本章節將說明功能需求主動式文件的。 使用中文件擁有一組資料,且能夠存取存放裝置可以儲存和擷取資料。 它可建立及管理其資料的一或多個檢視。 除了支援的一般嵌入和就地啟動的 OLE 文件的介面,在使用中文件通訊能夠建立檢視表,透過IOleDocument。 經由此介面,容器可以要求建立 (並且可能是列舉),可以顯示使用中文件的檢視。 經由此介面,主動式文件也可以提供其他資訊,例如它是否支援多個檢視或複合矩形。

下面是 IOleDocument 介面。 請注意, IEnumOleDocumentViews 介面是標準的 OLE 列舉值為 IOleDocumentView 1 型別。

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

}

每個使用中的文件必須具有與此介面的檢視框架提供者。 如果文件不內嵌式的容器內,使用中的文件伺服程式本身必須提供檢視框架。 然而,當使用中文件內嵌於主動式文件容器,容器提供檢視框架。

主動式文件可以建立一或多個類型的檢視的資料 (例如,正常、 大綱、 稿版面配置,等等)。 檢視執行起來像是篩選器可以透過它看到資料。 即使文件只有一種檢視類型,您可能還要做為支援新視窗功能支援多個檢視 (比方說, 開新視窗上的項目 視窗在 Office 應用程式中的功能表)。

主動式文件的需求

主動式文件,可顯示在使用中的文件容器必須:

  • 使用 OLE 的複合檔案做為它的儲存機制,藉由實作IPersistStorage

  • 支援的基本嵌入功能 OLE 文件,包括由檔案建立。 這必須介面IPersistFileIOleObject,以及IDataObject

  • 支援一或多個檢視,其中每一個都可以就地啟動。 也就是檢視表必須支援的介面IOleDocumentView的介面及IOleInPlaceObjectIOleInPlaceActiveObject (使用容器的 IOleInPlaceSiteIOleInPlaceFrame 介面)。

  • 支援標準的使用中文件的介面IOleDocumentIOleCommandTarget,以及IPrint

知道何時以及如何使用容器端介面在這些需求被隱含的。

檢視物件的需求

主動式文件可以建立一個或多個檢視它的資料。 功能上來說,這些檢視就如同到特定的方法,可顯示資料的連接埠。 如果使用中的文件只支援單一檢視,將使用中文件和此單一檢視可以實作使用單一類別。 IOleDocument::CreateView 傳回同一個物件的IOleDocumentView介面指標。

用來呈現作用中的文件容器內,檢視元件必須支援 IOleInPlaceObjectIOleInPlaceActiveObject 除了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);

}

每個檢視都相關的檢視站台,封裝檢視框架和檢視埠 (HWND 和矩形區域,該視窗中的)。 站台公開這項功能但標準 IOleInPlaceSite 介面。 請注意可以有一個以上檢視埠,在單一 HWND 上。

一般而言,每一種檢視會有不同列印的形式。 因此檢視表和對應的檢視站台應該實作列印介面如果IPrintIContinueCallback,分別。 檢視框架必須交涉與檢視提供者,透過 IPrint 列印開始時,這樣頁首、 頁尾、 邊界和相關項目可以正確列印。 檢視提供者通知的框架與列印相關的事件,透過IContinueCallback。 如需使用這些介面的詳細資訊,請參閱以程式設計方式列印

請注意是否使用中的文件只支援單一檢視,則將使用中文件和此單一檢視可以實作使用單一的實體類別。 IOleDocument::CreateView 只會傳回相同的物件IOleDocumentView介面指標。 簡單地說,不須有兩個不同的物件執行個體需要只有一個檢視時。

檢視物件也可以是命令目標。 藉由實作IOleCommandTarget檢視可以接收來自容器的使用者介面中的命令 (例如新增開啟另存新檔列印檔案功能表 ; and Copy, Paste, Undo on the Edit menu). 如需詳細資訊,請參閱 訊息處理和命令目標

請參閱

概念

使用中的文件內含項目