OLE 提供了唯一标识持久性文档 (GetClassFile) 并加载到其关联的代码 (CoCreateInstance、 QueryInterface(IID_IPersistFile)、 QueryInterface(IID_IPersistStorage)、 IPersistFile::Load和 IPersistStorage::Load)。进一步启用打印文档,活动文档包容 (使用现有的 OLE 设计最初不随 OLE 2.0) 引入一个基础标准的打印接口, IPrint,通常可通过可以加载文件类型的持久状态的所有对象。激活的每个视图文档可以选择支持 IPrint 接口提供这些功能。
IPrint 接口定义为:
interface IPrint : IUnknown
{
HRESULT SetInitialPageNum([in] LONG nFirstPage);
HRESULT GetPageInfo(
[out] LONG *pnFirstPage,
[out] LONG *pcPages);
HRESULT Print(
[in] DWORD grfFlags,
[in,out] DVTARGETDEVICE **pptd,
[in,out] PAGESET ** ppPageSet,
[in,out] STGMEDIUM **ppstgmOptions,
[in] IContinueCallback* pCallback,
[in] LONG nFirstPage,
[out] LONG *pcPagesPrinted,
[out] LONG *pnPageLast);
};
客户端和容器使用 IPrint::Print 指示文档打印自己文档的一次加载,指定打印控制标志、目标计算机、打印的页以及其他选项。客户端可以通过界面 IContinueCallback (下文) 还控制打印的延续。
此外, IPrint::SetInitialPageNum 支持能够打印一系列文档,在一个方传递计算页无缝,激活的一个优点显然文档与 Office 活页夹的容器。IPrint::GetPageInfo 使显示页码信息不必将允许调用方检索启动的分页以前传递给 SetInitialPageNum (或启动分页的文档) 的内部默认和页的数量文档中的。
支持 IPrint 的对象与 “可打印的”键的注册表中标记存储在对象的 CLSID 下:
HKEY_CLASSES_ROOT \ CLSID \ {…}\ 可打印
IPrint 在支持 IPersistFile 或 IPersistStorage的同一对象通常实现。调用方注意函数编程方式发现打印某些类持久状态在注册表中 “可打印的”键的。目前, “可打印”表示为至少 IPrint支持;然后将 QueryInterface 可用 IPrint 表示基本级别的支持的接口可能在将来定义。
在打印过程中,您可能希望启动打印控件的客户端或容器打印是否应继续。例如,容器可以支持应尽快停止打印作业的 “停止打印”命令。若要支持此功能,可打印的对象的客户端才能实现的接口 IContinueCallback的小通知接收器对象:
interface IContinueCallback : IUnknown
{
HRESULT FContinue(void);
HRESULT FContinuePrinting(
[in] LONG cPagesPrinted,
[in] LONG nCurrentPage,
[in] LPOLESTR pszPrintStatus);
};
此接口旨在将用作取代在 Win32 API 的各种继续执行程序的泛型继续回调函数 (如打印的 AbortProc 和图元文件枚举的 EnumMetafileProc )。因此此接口设计可用于各种耗时的过程。
在最通用的情况下, IContinueCallback::FContinue 功能由任何最定期调用过程。接收器对象返回 S_OK 继续操作并 S_FALSE 尽快停止该过程。
FContinue,但是,无法使用在 IPrint::Print中;相反,打印使用 IContinueCallback::FContinuePrint。所有输出对象应定期调用并打印页的数量,页的数字打印和其他字符串的 FContinuePrinting 描述客户端可以选择向用户显示的打印状态 (例如 “第 5 页 19 ")。