活动文档
活动文档扩展 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 视图可以接收则源自容器的用户界面的命令 (例如 新建, 打开, 另存为,在 文件 菜单的 打印 ;并 复制、 粘贴, 撤消 在 编辑 菜单)。 有关更多信息,请参见 消息处理和命令目标。