“页面设置”对话框

显示一个模式对话框,允许用户设置打印页面的以下属性:

  • 纸张类型(信封、法律、信件等)
  • 纸张来源(手动馈送、拖拉机饲料、纸送纸器等)
  • 页面方向(纵向或横向)
  • 页边距的宽度

通过初始化 PAGESETUPDLG 结构并将结构传递给 PageSetupDlg 函数,可以创建和显示 页面设置 对话框。 但是,对话框中显示的属性因打印机的功能而异。 下图显示了典型的“页面设置 ”对话框

页设置对话框

如果用户 单击“确定”按钮,PageSetupDlgPAGESETUPDLG 结构中设置各种成员以指定用户的选择后返回 TRUEptPaperSizertMargin 成员包含用户指定的值。 hDevModehDevNames 成员包含 DEVMODEDEVNAMES 结构的全局内存句柄。 这些结构包含其他页面信息以及有关打印机的信息。 可以使用此信息准备要发送到所选打印机的输出。

如果用户取消 页面设置 对话框或发生错误,PageSetupDlg 返回 FALSE。 若要确定错误的原因,请调用 CommDlgExtendedError 函数来检索扩展的错误值。

本部分讨论以下主题。

初始化“页面设置”对话框

默认情况下,“页面设置”对话框显示有关当前默认打印机的信息。 若要指示对话框显示有关特定打印机的信息,请设置 DEVMODEDEVNAMES 结构的成员,并将这些结构的全局内存句柄分配给 PAGESETUPDLG中的相应成员。 如果指定当前未安装的打印机的名称,对话框将显示一条错误消息。 若要阻止对话框显示错误消息,请使用 PSD_NOWARNING 值。 若要检索有关默认打印机的信息而不显示 页面设置 对话框,请使用 PSD_RETURNDEFAULT 值。

如果默认度量系统为英寸,则对话框使用千分之几英寸作为默认度量单位。 如果默认度量系统是指标,则对话框使用数百毫米作为默认度量单位。 若要替代默认度量单位,请将 标志PAGESETUPDLG 结构的 标志 成员中设置 PSD_INHUNDREDTHSOFMILLIMETERSPSD_INTHOUSANDTHSOFINCHES 标志。

默认情况下,边距的初始值为 1 英寸。 如果设置 PSD_MARGINS 标志,对话框将显示在 rtMargin 成员中指定的初始边距值。 用户可以为边距指定的默认最小值是打印机允许的最小边距。 如果设置 PSD_MINMARGINS 标志,对话框将强制 rtMinMargin 成员中指定的最小边距。

若要阻止用户选择某些选项,请设置以下标志的任意组合以禁用相应的控件。

意义
PSD_DISABLEMARGINS 禁用用户在其中输入边距设置的编辑控件。
PSD_DISABLEORIENTATION 禁用 纵向横向 单选按钮。
PSD_DISABLEPAPER 禁用用于选择纸张大小和纸张源的控件。
PSD_DISABLEPRINTER 禁用 打印机 按钮。

 

自定义“页面设置”对话框

例如,如果要包含应用程序唯一的其他控件,则可以为 页面设置 对话框提供自定义模板。 PageSetupDlg 函数使用自定义模板代替默认模板。

为“页面设置”对话框提供自定义模板

  1. 通过修改 Prnsetup.dlg 文件中指定的默认模板来创建自定义模板。 在 Dlgs.h 文件中定义默认 页面设置 对话框模板中使用的控件标识符。
  2. 使用 PAGESETUPDLG 结构启用模板,如下所示:
      • 如果自定义模板是应用程序或动态链接库中的资源,请在 标志 成员中设置 PSD_ENABLEPAGESETUPTEMPLATE 标志。 使用 hInstancelpPageSetupTemplateName 结构的成员来标识模块和资源名称。

        -或-

      • 如果自定义模板已在内存中,请设置 PSD_ENABLEPAGESETUPTEMPLATEHANDLE 标志。 使用 hPageSetupTemplate 成员标识包含模板的内存对象。

若要筛选发送到对话框过程的消息,可以提供 PageSetupHook 挂钩过程。 如果使用自定义模板定义其他控件,则必须提供 PageSetupHook 挂钩过程来处理控件的输入。 此外,还可以提供 PagePaintHook 挂钩过程,以自定义 “页面设置” 对话框显示的示例页面的内容。 有关 PagePaintHook 挂钩过程的详细信息,请参阅 自定义示例页

启用 PageSetupHook 挂钩过程

  1. PAGESETUPDLG 结构的 标志 成员中设置 PSD_ENABLEPAGESETUPHOOK 标志。
  2. lpfnPageSetupHook 成员中指定挂钩过程的地址。

处理其 WM_INITDIALOG 消息后,对话框过程会将 WM_INITDIALOG 消息发送到 PageSetupHook 挂钩过程。 此消息的 lParam 参数是指向用于初始化对话框的 PAGESETUPDLG 结构的指针。

自定义示例页

页面设置 对话框包含示例页面的图像,该图像显示用户选择如何影响打印输出的外观。 图像由一个矩形组成,该矩形代表所选纸张或信封类型,虚线矩形表示当前边距,部分(希腊文本)字符显示打印页上的文本外观。

调用 PageSetupDlg 函数时,可以提供 PagePaintHook 挂钩过程来自定义示例页面的外观。

启用 PagePaintHook 挂钩过程

  1. PAGESETUPDLG 结构的 标志 成员中设置 PSD_ENABLEPAGEPAINTHOOK 标志。
  2. lpfnPagePaintHook 成员中指定挂钩过程的地址。

每当对话框即将绘制示例页的内容时,挂钩过程就会按照列出的顺序接收以下消息。

消息 意义
WM_PSD_PAGESETUPDLG 对话框即将绘制示例页。 挂钩过程可以使用此消息来准备绘制示例页的内容。
WM_PSD_FULLPAGERECT 对话框即将绘制示例页。 此消息指定示例页的边界矩形。
WM_PSD_MINMARGINRECT 对话框即将绘制示例页。 此消息指定边距矩形。
WM_PSD_MARGINRECT 对话框即将绘制边距矩形。
WM_PSD_GREEKTEXTRECT 该对话框即将在边距矩形内绘制希腊文本。
WM_PSD_ENVSTAMPRECT 对话框即将在信封示例页的信封标记矩形中绘制。 此邮件仅针对信封发送。
WM_PSD_YAFULLPAGERECT 该对话框即将绘制信封示例页的返回地址部分。 此消息用于信封和其他纸张大小。

 

如果挂钩过程为绘图序列前三条消息(WM_PSD_PAGESETUPDLGWM_PSD_FULLPAGERECTWM_PSD_MINMARGINRECT)的任何一条消息返回 true TRUE,则对话框不会再发送任何消息,并且不会在下一次系统需要重新绘制示例页之前在示例页中绘制。 如果挂钩过程返回所有三条消息 FALSE,则对话框将发送绘图序列的剩余消息。

如果挂钩过程为绘图序列中剩余的任何消息返回 TRUE,则对话框不会绘制示例页的相应部分。 如果挂钩过程为上述任何消息返回 FALSE,则对话框将绘制示例页的该部分。

若要防止对话框绘制示例页的内容,可以设置 PSD_DISABLEPAGEPAINTING 标志。 此标志不会影响 PagePaintHook 挂钩过程,该过程仍接收所有 WM_PSD_* 消息,并且可以绘制示例页面内容。