活动文档扩展 OLE 多个文档技术。这些扩展提供管理视图的其他接口形式,因此,对象可以在容器中运行,仍然保留为其显示和打印功能的控件。此过程可以显示文档外部帧 (如 Microsoft Office 活页夹或 Microsoft Internet Explorer) 和在本机框架 (例如产品自己的视图端口)。
本节描述函数 激活的要求文档。活动文档拥有设置数据和访问数据可以保存和检索存储的。它可以创建和管理在其数据的一个或多个视图。除了支持 OLE 通常嵌入和就地激活接口的文档,活动文档传达它能够通过 IOleDocument创建视图。通过此接口,容器可能需要创建 (也可能是枚举) 活动文档可以将显示视图。通过此接口,活动文档还提供有关其自身的其他信息,如它是否支持多视图或复杂的矩形。
下面是 IOleDocument 接口。请注意 IEnumOleDocumentViews 接口是 IOleDocumentView * 类型的标准 OLE 枚举数。
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);
}
每个活动文档必须具有此接口的一个视图框架提供程序。如果文档中在容器中嵌入,活动文档服务器必须提供视图帧。但是,激活时,文档时在活动嵌入文档容器,容器提供视图帧。
活动文档可以创建其数据 (例如,规则、大纲,页面布局 视图 的一个或多个类型,等等)。视图象数据中看到的筛选器。即使文档只有视图的一种类型,您可能仍为支持多种视图作为支持新的 windows 函数的方法 (例如,在 窗口 菜单的 新建窗口 项目在 Office 应用程序)。
激活的要求文档
在活动中显示文档容器必须活动文档:
使用 OLE 复合文件作为其存储机制通过实现 IPersistStorage。
支持 OLE 基本嵌入的功能文档,包括 由文件创建。这需要接口 IPersistFile、 IOleObject和 IDataObject。
支持一个或多个视图,每个能够就地激活上。即视图必须支持接口 IOleDocumentView 和接口 IOleInPlaceObject 和 IOleInPlaceActiveObject (使用容器的 IOleInPlaceSite 和 IOleInPlaceFrame 接口)。
支持标准活动文档界面 IOleDocument、 IOleCommandTarget和 IPrint。
了解使用容器端接口何时以及如何在这些要求提示。
视图对象的要求
活动文档可以创建其数据的一个或多个视图。从功能上来说,这些视图与在特定方法上的端口显示的数据。如果活动文档只支持单个视图中,活动文档,并使用单个类,该单一视图中实现。IOleDocument::CreateView 返回相同的对象的 IOleDocumentView 接口指针。
在活动中表示文档容器,除了 IOleDocumentView外,视图组件必须支持 IOleInPlaceObject 和 IOleInPlaceActiveObject :
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 的视是可能的。
通常,查看每种类型的具有不同的打印表示。因此视图和对应的视图站点应实现打印接口,如果 IPrint 和 IContinueCallback,分别。视图帧必须与视图提供程序协商通过 IPrint ,打印时启动时,因此,标题、脚注、边距和相关组件正确打印。视图提供程序通过 IContinueCallback通知与打印相关的事件帧。有关使用这些接口的更多信息,请参见 编程打印。
请注意,如果激活文档只支持单个视图,然后激活文档,并使用一个具体类,唯一视图中实现。IOleDocument::CreateView 返回相同的对象的 IOleDocumentView 接口指针。为简单起见,不需要的具有两个不同对象实例,只有需要某视图。
视图对象也是命令目标。通过实现 IOleCommandTarget 视图可以接收则源自容器的用户界面的命令 (例如 新建, 打开, 另存为,在 文件 菜单的 打印 ;并 复制、 粘贴, 撤消 在 编辑 菜单)。有关更多信息,请参见 消息处理和命令目标。