主動式文件容器
使用中的檔容器,例如 Microsoft Office Binder 或 Internet Explorer,可讓您在單一框架內處理數個不同應用程式類型的檔(而不是強制您為每個檔案類型建立和使用多個應用程式框架)。
MFC 提供 類別中使用中 COleDocObjectItem
檔容器的完整支援。 您可以使用 [MFC 應用程式精靈] 來建立使用中檔容器,方法是在 MFC 應用程式精靈的 [複合檔案支援 ] 頁面上選取 [使用中檔容器 ] 核取方塊。 如需詳細資訊,請參閱 建立使用中檔容器應用程式 。
如需使用中檔容器的詳細資訊,請參閱:
容器需求
使用中檔容器中的使用中檔支援不僅僅是介面實作:它也需要知道使用自主物件的介面。 這同樣適用于使用中檔延伸模組,其中容器也必須知道如何在使用中檔本身使用這些延伸模組介面。
整合使用中檔的作用中檔容器必須:
能夠透過
IPersistStorage
介面處理物件儲存體,也就是說,它必須為每個使用中檔提供IStorage
實例。支援 OLE 檔的基本內嵌功能,需要實作 和
IAdviseSink
的「網站」物件(每份檔一個或內嵌一個)。IOleClientSite
支援内嵌物件或使用中檔的就地啟用。 容器的月臺物件必須實
IOleInPlaceSite
作,而且容器的框架物件必須提供IOleInPlaceFrame
。藉由實
IOleDocumentSite
作 來提供容器與檔交談的機制,以支援使用中檔的延伸模組。 或者,容器可以實作使用中檔介面IOleCommandTarget
,並IContinueCallback
挑選簡單的命令,例如列印或儲存。
框架物件、檢視物件和容器物件可以選擇性地實 IOleCommandTarget
作以支援特定命令的分派,如命令目標 中所述 。 檢視和容器物件也可以選擇性地實 IPrint
作 和 IContinueCallback
,以支援程式設計列印,如程式設計列印 中所述 。
下圖顯示容器與其元件之間的概念關聯性(左側),以及使用中檔及其檢視(右圖)。 使用中檔會管理儲存體和資料,檢視會顯示或選擇性地列印該資料。 粗體介面是使用中檔參與所需的介面;這些粗體和斜體是選擇性的。 所有其他介面都是必要的。
僅支援單一檢視的檔可以在單一具體類別上實作檢視和檔元件(也就是其對應的介面)。 此外,一次只支援一個檢視的容器網站可以將檔網站和檢視網站合併成單一具體網站類別。 不過,容器的框架物件必須保持不同,而且容器的檔元件只是在這裡包含,以完整瞭解架構:它不受使用中檔內含專案架構的影響。
檔網站物件
在使用中檔內含專案架構中,檔網站與 OLE Documents 中的用戶端網站物件相同,並新增 IOleDocument
介面:
interface IOleDocumentSite : IUnknown
{
HRESULT ActivateMe(IOleDocumentView *pViewToActivate);
}
檔網站在概念上是一或多個「檢視網站」物件的容器。 每個檢視網站物件都會與檔網站所管理檔的個別檢視物件相關聯。 如果容器只支援每個檔網站的單一檢視,則可以使用單一具體類別來實作檔網站和檢視網站。
檢視網站物件
容器的檢視網站物件會管理檔特定檢視的顯示空間。 除了支援標準 IOleInPlaceSite
介面之外,檢視網站也通常會實作 IContinueCallback
程式設計列印控制項。 (請注意,檢視物件永遠不會查詢 IContinueCallback
,因此它實際上可以在容器所需的任何物件上實作。
支援多個檢視的容器必須能夠在檔網站內建立多個檢視網站物件。 這會為每個檢視提供個別的啟用和停用服務,如 透過 IOleInPlaceSite
提供。
框架物件
容器的框架物件大部分是用於 OLE Documents 就地啟用的相同框架,也就是處理功能表和工具列交涉的框架。 檢視物件可以透過 IOleInPlaceSite::GetWindowContext
存取這個框架物件,它也會提供容器物件的存取權,此物件代表容器檔案(可以處理窗格層級工具列交涉和包含的物件列舉)。
使用中檔容器可以藉由新增 IOleCommandTarget
來增強框架。 這可讓它接收源自使用中檔使用者介面的命令,其方式與這個介面允許容器傳送相同的命令(例如 檔案新增 、 開啟 、另存新檔、另存 新檔、 列印 ;編輯使用中檔的 [複製 ]、 [貼上 ]、 [復原 ] 和其他檔。 如需詳細資訊,請參閱 命令目標 。