编程打印

OLE 提供了唯一标识持久性文档 (GetClassFile) 并加载到其关联的代码 (CoCreateInstanceQueryInterface(IID_IPersistFile)QueryInterface(IID_IPersistStorage)IPersistFile::LoadIPersistStorage::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 在支持 IPersistFileIPersistStorage的同一对象通常实现。调用方注意函数编程方式发现打印某些类持久状态在注册表中 “可打印的”键的。目前, “可打印”表示为至少 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 ")。

请参见

概念

活动文档容器