打印对话框

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

打印对话框允许用户选择特定打印作业的选项。例如,用户可以指定要使用的打印机,要打印的页面范围和份数。

您可以通过初始化PRINTDLG结构并将结构传递给PrintDlg函数来创建并显示“打印”对话框。

下图显示了一个典型的打印对话框。

如果用户单击确定按钮,PrintDlg返回TRUE,并使用PRINTDLG结构返回有关用户选择的信息。例如,hDevModehDevNames成员通常返回DEVMODEDEVNAMES结构的全局内存句柄。您可以使用这些结构中的信息为所选打印机创建设备上下文或信息上下文。

如果用户取消打印对话框或发生错误,PrintDlg返回FALSE。您可以使用CommDlgExtendedError函数来检索扩展错误值来确定错误的原因。

打印对话框包括打印范围组的单选按钮,指示用户是否要打印所有页面,一系列页面,或仅选择所选文本。在致电PrintDlg之前,您可以设置一个PD_ALLPAGES,PD_SELECTION或PD_PAGENUMS标志来指示最初选择哪个按钮。当PrintDlg返回TRUE时,该函数设置其中一个标志以指示用户的选择。如果设置了PD_PAGENUMS,则PRINTDLG结构的nFromPagenToPage成员包含用户指定的起始页和结束页。要禁用Pages单选按钮及其关联的“From:”和“To:”编辑控件,请设置PD_NOPAGENUMS标志。要禁用选择单选按钮,请设置PD_NOSELECTION标志。

对话框包括一个编辑控件,用户可以在其中输入要打印的份数。如果PRINTDLG结构的hDevMode成员不为NULL,则DEVMODE结构的dmCopies成员将指定此编辑控件的初始值。如果hDevMode为NULL,则PRINTDLG结构的NCOPIES成员将指定初始值。当PrintDlg返回时,NCOPIES通常表示用户指定的份数。但是,如果在创建对话框时设置了PD_USEDEVMODECOPIESANDCOLLATE标志,则返回时NCOPIES始终设置为1,DEVMODEdmCopies成员表示要打印的份数。

“分选”复选框指示用户如果要打印多份副本,则要整理页面。如果选中了分页复选框,则设置PD_COLLATE标志。如果您的应用程序不支持多个副本或模拟排序规则,请在PRINTDLG结构的成员中设置PD_USEDEVMODECOPIESANDCOLLATE标志。禁用“逐份打印”复选框和“份数:”编辑控件,除非打印机驱动程序支持多个副本和整理。

打印到文件复选框指示用户是否要将输出发送到文件而不是打印机。您可以设置PD_PRINTTOFILE标志,以便初始化复选框。要隐藏该复选框,请设置PD_HIDEPRINTTOFILE标志。要禁用它,请设置PD_DISABLEPRINTTOFILE标志。如果用户选择“打印到文件”选项,PrintDlg设置PD_PRINTTOFILE标志,并返回“DEVNAMES结构的wOutputOffset成员所指示的偏移量”FILE:“。当您调用StartDoc函数开始打印操作时,请在DOCINFO结构的lpszOutput成员中指定此“FILE:”字符串。指定此字符串会导致打印子系统向用户查询输出文件的名称。

默认情况下,“打印”对话框最初显示有关当前默认打印机的信息。您可以通过初始化DEVMODEDEVNAMES结构并将结构的全局内存句柄分配给hDevModehDevNames成员来指示其他安装的打印机的信息。您在DEVMODE结构的dmDeviceName成员或DEVNAMES结构wDriverOffset成员中指定的设备名称必须标识也在WIN.INI的[Devices]部分列出的打印机设备。文件。如果设备未列出,PrintDlg将返回错误。

您可以通过在PRINTDLG结构的成员中设置PD_RETURNDC或PD_RETURNIC标志来指示PrintDlg为打印机创建设备上下文或信息上下文。该函数返回hDC成员中设备上下文或信息上下文的句柄。如果使用PD_RETURNDC标志,则可以使用设备上下文来生成打印机的输出。

要检索有关默认打印机的信息,而不显示“打印”对话框,请设置PD_RETURNDEFAULT标志。在这种情况下,PrintDlghDevModehDevNames成员设置为包含该信息的结构的句柄后立即返回。

默认情况下,PrintDlg在发生错误时显示消息框。例如,如果没有安装打印机,该函数将显示错误消息。要防止该函数显示这些警告消息,请设置PD_NOWARNING标志。