PRINTDLG

【勇芳软件工作室】汉化HomePreviousNext

PRINTDLG结构包含PrintDlg函数用于初始化“打印公共”对话框的信息。在用户关闭对话框后,系统会在此结构中返回有关用户定义的打印选择的信息。

typedef struct tagPD { // pd

DWORD lStructSize;

HWND hwndOwner;

HANDLE hDevMode;

HANDLE hDevNames;

HDC hDC;

DWORD Flags;

WORD nFromPage;

WORD nToPage;

WORD nMinPage;

WORD nMaxPage;

WORD nCopies;

HINSTANCE hInstance;

DWORD lCustData;

LPPRINTHOOKPROC lpfnPrintHook;

LPSETUPHOOKPROC lpfnSetupHook;

LPCTSTR lpPrintTemplateName;

LPCTSTR lpSetupTemplateName;

HANDLE hPrintTemplate;

HANDLE hSetupTemplate;

} PRINTDLG;

会员

lStructSize

指定结构大小(以字节为单位)。

hwndOwner

标识拥有该对话框的窗口。该成员可以是任何有效的窗口句柄,如果对话框没有所有者,它可以为NULL。

hDevMode

标识包含DEVMODE结构的可移动全局内存对象。在调用PrintDlg函数之前,结构成员可能包含用于初始化对话框控件的数据。当PrintDlg返回时,结构成员指定对话框控件的状态。

如果使用该结构初始化对话框控件,则必须分配空间并创建DEVMODE结构。(你应该分配一个可移动的内存块)

如果不使用结构初始化对话框控件,hDevMode可能为NULL。在这种情况下,PrintDlg为结构分配内存,初始化其成员,并返回一个标识它的句柄。

如果指定打印机的设备驱动程序不支持扩展设备模式,PrintDlg返回时,hDevMode为NULL。

如果设备名称(dmDeviceName DEVMODE结构的成员指定)没有出现在WIN.INI的[devices]部分,PrintDlg将返回一个错误。

因为这个结构是一个可移动的全局内存对象,所以在PrintDlg的执行过程中hDevMode的值可能会改变。

有关系统如何解决由hDevModehDevNames成员指定的值之间的可能数据冲突的讨论,请参阅以下备注部分。

hDevNames

标识包含DEVNAMES结构的可移动全局内存对象。此结构包含三个指定驱动程序名称,打印机名称和输出端口名称的字符串。在调用PrintDlg之前,结构成员包含用于初始化对话框控件的字符串。当PrintDlg返回时,结构成员包含用户键入的字符串。调用应用程序使用这些字符串来创建设备上下文或信息上下文。

如果使用结构初始化对话框控件,则必须为其分配空间并创建DEVNAMES结构。(你应该分配一个可移动的全局内存块)

如果不使用结构初始化对话框控件,hDevNames可能为NULL。在这种情况下,PrintDlg为结构分配内存,初始化其成员(通过使用DEVMODE结构中指定的打印机名称),并返回一个标识它的句柄。当PrintDlgDEVNAMES结构中初始化成员时,使用WIN.INI的[devices]部分中显示的第一个端口名称。例如,如果[devices]部分中出现以下字符串,则该函数将使用“LPT1:”作为端口名称:

PCL / HP LaserJet=HPPCL,LPT1:,LPT2:

如果hDevModehDevNames均为NULL,PrintDlg将使用当前的默认打印机初始化hDevNames.

因为这个结构是一个可移动的全局内存对象,所以在PrintDlg的执行过程中hDevNames的值可能会改变。

有关系统如何解决由hDevNameshDevMode指定的值之间可能的数据冲突的讨论,请参阅本主题后面的备注部分。

hDC

根据成员是否指定PD_RETURNDC或PC_RETURNIC标志,标识设备上下文或信息上下文。如果没有指定标志,则该成员的值未定义。如果指定了两个标志,则PD_RETURNDC具有优先级。

一组位标记,可用于初始化“打印公共”对话框。当对话框返回时,它设置这些标志以指示用户的输入。该成员可以是以下标志的组合:

PD_ALLPAGES 
 默认标志,表示最初选择了全部单选按钮。该标志用作占位符来指示未指定PD_PAGENUMS和PD_SELECTION标志。
PD_COLLATE 
 在输入上设置时,在“分页”复选框中放置一个复选框。当PrintDlg函数返回时,此标志指示用户选择了“逐份打印”选项,打印机驱动程序不支持排序规则。在这种情况下,应用程序必须提供整理。如果PrintDlg在返回时设置PD_COLLATE标志,则DEVMODE结构的dmCollat?? ??ê成员未定义。
PD_DISABLEPRINTTOFILE 
 禁用打印到文件复选框。
PD_ENABLEPRINTHOOK 
 启用lpfnPrintHook成员中指定的挂接过程。这将启用打印对话框的挂钩过程。
PD_ENABLEPRINTTEMPLATE 
 表示的hInstancelpPrintTemplateName成员指定一个对话框模板,以替代“打印”对话框的默认模板。
PD_ENABLEPRINTTEMPLATEHANDLE 
 表示hPrintTemplate成员标识包含预加载对话框模板的数据块。系统使用此模板代替“打印”对话框的默认模板。如果指定了此标志,系统将忽略lpPrintTemplateName成员。
PD_ENABLESETUPHOOK 
 启用lpfnSetupHook成员中指定的挂接过程。这将启用打印设置对话框的挂钩过程。
PD_ENABLESETUPTEMPLATE 
 表示的hInstancelpSetupTemplateName成员指定一个对话框模板,用于替代“打印设置”对话框的默认模板。
PD_ENABLESETUPTEMPLATEHANDLE 
 表示hSetupTemplate成员标识包含预加载对话框模板的数据块。系统使用此模板代替“打印设置”对话框的默认模板。如果指定了此标志,系统将忽略lpSetupTemplateName成员。
PD_HIDEPRINTTOFILE 
 隐藏打印到文件复选框。
PD_NOPAGENUMS 
 禁用页面单选按钮和关联的编辑控件。
PD_NOSELECTION 
 禁用选择单选按钮。
PD_NOWARNING 
 当没有默认打印机时,防止显示警告信息。
PD_PAGENUMS 
 当创建对话框时,使页面单选按钮处于选定状态。当PrintDlg返回时,如果“页面”单选按钮处于选中状态,则此标志置位。
PD_PRINTSETUP 
 导致系统显示“打印设置”对话框,而不是“打印”对话框。
PD_PRINTTOFILE 
 创建对话框时,勾选“打印到文件”复选框。

PrintDlg返回时,如果勾选此复选框,则此标志置位。在这种情况下,由DEVNAMES结构wOutputOffset成员指定的偏移量包含字符串“FILE:”。当您调用StartDoc功能开始打印操作时,请在DOCINFO结构的lpszOutput成员中指定此“FILE:”字符串。指定此字符串会导致打印子系统向用户查询输出文件的名称。

PD_RETURNDC 
 导致PrintDlg返回与用户在对话框中进行的选择相匹配的设备上下文。设备上下文在hDC中返回。
PD_RETURNDEFAULT 
 PrintDlg功能不会显示对话框。而是将hDevNameshDevMode成员设置为为系统默认打印机初始化的DEVMODEDEVNAMES结构的句柄。hDevNames??或hDevMode必须为NULL,否则PrintDlg返回错误。如果系统默认打印机由旧的打印机驱动程序支持(早于Windows 3.0版),则只返回hDevNames hDevMode为NULL。
PD_RETURNIC 
 与PD_RETURNDC标志类似,除了该标志返回信息上下文而不是设备上下文。如果未指定PD_RETURNDC或PD_RETURNIC,则hDC在输出上未定义。
PD_SELECTION 
 当创建对话框时,使选择单选按钮处于选定状态。当PrintDlg返回时,如果选择了“选择”单选按钮,则会指定此标志。如果既不设置PD_PAGENUMS也不设置PD_SELECTION,则选择“全部”单选按钮。
PD_SHOWHELP 
 导致对话框显示帮助按钮。hwndOwner成员必须指定窗口以接收当用户单击“帮助”按钮时对话框发送的HELPMSGSTRING注册消息。
PD_USEDEVMODECOPIES 
 与PD_USEDEVMODECOPIESANDCOLLATE相同
PD_USEDEVMODECOPIESANDCOLLATE 
 如果打印机驱动程序不支持多个副本,则禁用“副本”编辑控件,如果打印机驱动程序不支持排序规则,则禁用“逐份打印”复选框。如果未指定此标志,PrintDlg将为DEVMODE结构的dmCopiesdmCollat?? ??ê成员存储份数和整理选项的用户选择。
 如果未设置此标志,则如果驱动程序支持多个副本和排序规则,则会在DEVMODE结构中返回副本和整理信息。如果驱动程序不支持多个副本和排序规则,则会在PRINTDLG结构中返回该信息。这意味着应用程序只需要查看NCOPIES和PD_COLLATE来确定需要渲染的副本数,以及是否需要打印它们进行整理。

nFromPage

指定起始页面编辑控件的初始值。当PrintDlg函数返回时,nFromPage指定用户指定的起始页面。该值仅在指定了PD_PAGENUMS标志时有效。

nToPage

指定结束页面编辑控件的初始值。当PrintDlg函数返回时,nToPage指定用户指定的结束页面。该值仅在指定了PD_PAGENUMS标志时有效。

nMinPage

指定“发件人”和“到”页面编辑控件中指定的页面范围的最小值。

nMaxPage

指定“发件人”和“到”页面编辑控件中指定的页面范围的最大值。

NCOPIES

如果hDevMode为NULL,则包含Copies编辑控件的初始份数;否则,DEVMODE结构的dmCopies成员包含初始值。当PrintDlg返回时,此成员包含要打印的实际份数。如果打印机驱动程序不支持多个副本,则此值可能大于1,并且应用程序必须打印所有请求的副本。如果在成员中设置了PD_USEDEVMODECOPIESANDCOLLATE值,返回时NCOPIES始终设置为1,DEVMODE中的dmCopies成员将收到要打印的实际份数。

的hInstance

如果在成员中设置了PD_ENABLEPRINTTEMPLATE或PD_ENABLESETUPTEMPLATE标志,则的hInstance是包含由lpPrintTemplateNamelpSetupTemplateName成员命名的对话框模板的应用程序或模块实例的句柄。

lCustData

指定系统传递给由lpfnPrintHooklpfnSetupHook成员标识的挂接过程的应用程序定义数据。当系统向挂钩过程发送WM_INITDIALOG消息时,消息的【lParam的】参数是指向创建对话框时指定的PRINTDLG结构的指针。挂钩过程可以使用此指针获取lCustData值。

lpfnPrintHook

指向可以处理打印对话框的消息的PrintHookProc挂接过程。除非在成员中设置了PD_ENABLEPRINTHOOK标志,否则该成员将被忽略。

lpfnSetupHook

指向可以处理打印设置对话框的消息的SetupHookProc挂接过程。除非在成员中设置了PD_ENABLESETUPHOOK标志,否则此成员将被忽略。

lpPrintTemplateName

指向由的hInstance成员标识的模块中指定对话框模板资源的以null结尾的字符串。此模板代替标准打印对话框模板。除非在成员中设置了PD_ENABLEPRINTTEMPLATE标志,否则此成员将被忽略。

lpSetupTemplateName

指向由的hInstance成员标识的模块中的对话框模板资源的以null结尾的字符串。此模板代替标准的“打印设置”对话框模板。除非在成员中设置了PD_ENABLESETUPTEMPLATE标志,否则此成员将被忽略。

hPrintTemplate

如果在成员中设置了PD_ENABLEPRINTTEMPLATEHANDLE标志,则hPrintTemplate是包含对话框模板的内存对象的句柄。此模板代替标准打印对话框模板。

hSetupTemplate

如果在成员中设置了PD_ENABLESETUPTEMPLATEHANDLE标志,则hSetupTemplate是包含对话框模板的内存对象的句柄。此模板代替标准的“打印设置”对话框模板。

备注

hDevNameshDevMode指定的值之间可能存在数据冲突,因为DEVNAMES结构的wDeviceOffset成员应与DEVMODE结构的dmDeviceName成员相同。如果不是,系统将使用wDeviceOffset的值来解决数据冲突。

如果用户在公共打印对话框中检查“逐份打印”复选框,但打印机驱动程序不支持排序规则,PRINTDLG PRINTDLG结构返回的PRINTDLG结构的成员包括PD_COLLATE标志。此外,由hDevMode成员标识的DEVMODE结构的dmCollat?? ??ê成员设置为COLLATE_TRUE。如果设置了PD_COLLATE标志,则应用程序必须模拟排序规则。

如果设置了PD_USEDEVMODECOPIESANDCOLLATE标志,则如果打印机驱动程序不支持排序规则,则“逐份打印”复选框将显示为灰色。这确保用户只能选择一个副本,并且NCOPIES将是一个副本。如果司机确实支持多份,dmCopies将包含份数,NCOPIES将是一份。

在输入PrintDlg时,NCOPIES结构的NCOPIES成员指定未设置PD_USEDEVMODECOPIESANDCOLLATE的副本数。从PrintDlg退出时,如果打印机驱动程序不支持多个副本,则NCOPIES包含副本数。否则设置为1。如果从PrintDlg退出时NCOPIES大于一个,则应用程序必须打印文档的多个副本。

也可以看看

CreateDC, CreateIC, PrintDlg, DEVMODE, DEVNAMES, WM_INITDIALOG