打印属性表
Print 属性表是一个标准用户界面,允许用户指定特定打印作业的属性。 属性表由一组属性页组成,这些属性页因打印机或应用程序而异。 对于标准 Windows 属性页的子集,某些打印机可能会添加特定于驱动程序的属性页,而某些应用程序可能会添加特定于应用程序的属性页。
若要创建并显示 Print 属性表,请初始化 PRINTDLGEX 结构并将该结构传递给 PrintDlgEx 函数。
下图显示了典型的 Print 属性表。
PRINTDLGEX 结构的大多数成员与 PRINTDLG 结构的成员相同。 有关如何使用通用结构成员与对话框控件交互的说明,请参阅 打印对话框。 本主题的其余部分介绍与 “打印 ”对话框不同的“ 打印 ”属性表功能。
可以通过为“常规”页的下半部分指定自定义对话框模板以及指定其他属性页以跟随“常规”页来自定义 Print 属性表。 有关详细信息,请参阅 自定义打印属性表。
可以实现回调对象,以在显示属性表时从 PrintDlgEx 函数接收通知和消息。 提供自定义模板或其他页面的应用程序使用回调对象与属性表通信。 有关详细信息,请参阅 打印属性表的回调对象。
Print 属性表支持指定要打印的多个不连续页面范围。 PRINTDLGEX 结构的 lpPageRanges 成员指定 PRINTPAGERANGE 结构的数组,其中每个结构指定页面范围。
“打印”属性表将“当前页”单选按钮显示为单选按钮的“页面范围”组的一部分。 若要控制“当前页”单选按钮,请使用 PRINTDLGEX 结构的 Flags 成员中的PD_CURRENTPAGE和PD_NOCURRENTPAGE标志。
本部分讨论以下主题。
自定义打印属性表
可以通过以下方式自定义 Print 属性表:
- 为 “常规 ”页的下半部分提供自定义模板。 这允许包含应用程序唯一的其他控件。 PrintDlgEx 函数使用自定义模板代替默认模板。
- 提供其他属性页以遵循 “常规 ”页。
- 提供回调对象。 有关详细信息,请参阅 打印属性表的回调对象。
不能更改“ 常规 ”页的上半部分。 不能更改打印机驱动程序提供的属性页。
为“常规”页提供自定义模板:
通过修改 Prnsetup.dlg 文件中指定的 PRINTDLGEXORD 模板,为 “常规 ”页面的下半部分创建自定义模板。 通常,自定义模板的大小必须与默认模板大小相同。 但是,如果指定 PD_USELARGETEMPLATE 标志以创建更大的 “常规 ”页面,则可以放大自定义模板。 默认打印对话框模板中使用的控件标识符在 Dlgs.h 文件中定义。
使用 PRINTDLGEX 结构启用模板,如下所示:
如果自定义模板是应用程序或动态链接库中的资源,请在 Flags 成员中设置PD_ENABLEPRINTTEMPLATE标志。 使用结构的 hInstance 和 lpPrintTemplateName 成员标识模块和资源名称。
-或-
如果自定义模板已在内存中,请设置 PD_ENABLEPRINTTEMPLATEHANDLE 标志。 使用 hInstance 成员标识包含模板的内存对象。
如果使用自定义模板定义其他控件,则必须提供回调对象来处理控件的输入。 回调对象实现 IPrintDialogCallback::HandleMessage 方法,该方法接收发送到自定义对话框的消息。
提供其他属性页
使用 函数创建其他页面。
使用 PRINTDLGEX 结构的 lphPropertyPages 成员指定其他页面的句柄数组。
创建发送到页面的每个页面处理消息时指定的对话框过程。
你可能希望提供实现 接口的回调对象。 PrintDlgEx 函数使用此接口向应用程序传递指向 IPrintDialogServices 接口的指针。 其他属性页的对话框过程可以使用此接口检索有关当前所选打印机的信息。
Print 属性表的 Callback 对象
显示 Print 属性表的应用程序可以实现回调对象,以在显示属性表时从 PrintDlgEx 函数接收通知和消息。 若要提供回调对象,请指定指向 PRINTDLGEX 结构的 lpCallback 成员中的 对象的指针。
回调对象必须实现 IPrintDialogCallback 接口。 PrintDlgEx 函数在以下情况下调用 IPrintDialogCallback 方法:
- 当对话框已初始化时
- 当用户从属性表显示的已安装打印机列表中选择其他打印机时
- 在属性表的“ 常规 ”页的下半部分收到子对话框的消息时
回调对象还应实现 IObjectWithSite 接口。 PrintDlgEx 函数调用 方法,将指向 IPrintDialogServices 接口的指针传递给应用程序。 IPrintDialogCallback 方法可以使用 IPrintDialogServices 接口检索有关当前所选打印机的信息。 IPrintDialogServices 接口对于创建其他页面以遵循 Print 属性表的“常规”页的应用程序也很有用。 其他页面的对话框过程可以调用 IPrintDialogServices 方法。