PRINTDLG 打印对话框操作
Posted 我来乔23
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PRINTDLG 打印对话框操作相关的知识,希望对你有一定的参考价值。
typedef struct tagPD { DWORD lStructSize; HWND hwndOwner; HGLOBAL hDevMode; HGLOBAL hDevNames; HDC hDC; DWORD Flags; WORD nFromPage; WORD nToPage; WORD nMinPage; WORD nMaxPage; WORD nCopies; HINSTANCE hInstance; LPARAM lCustData; LPPRINTHOOKPROC lpfnPrintHook; LPSETUPHOOKPROC lpfnSetupHook; LPCTSTR lpPrintTemplateName; LPCTSTR lpSetupTemplateName; HGLOBAL hPrintTemplate; HGLOBAL hSetupTemplate; } PRINTDLG, *LPPRINTDLG;
参数说明:
lStructSize:本结构大小(字节数)
hwndOwner:父窗口句柄(可为NULL)
hDevMode:包含打印机设备与环境信息的DEVMODE结构句柄
hDevNames:包含驱动器名、打印机名和输出端口名的设备名结构DEVNAMES句柄
hDC:确定DC或IC(information context),由Flags是否设置PD_RETURNDC或PC_RETURNIC标志来决定
Flags:用于打印公用对话框初始化的标志位
nFromPage:指定开始页码编辑控件的初始值
nToPage:指定结束页码编辑控件的初始值
nMinPage:指定开始/结束页码编辑控件的页码范围的最小值,若nMinPage=nMaxPage,则“页码范围”单选钮和开始/结束页码编辑控件被灰化
nMaxPage:指定开始/结束页码编辑控件的页码范围的最大值
nCopies:指定拷贝份数编辑控件的初始值
hInstance:以下结构成员很少使用
lCustData:
lpfnPrintHook:
lpfnSetupHook:
lpPrintTemplateName:
lpSetupTemplateName:
hPrintTemplate:
hSetupTemplate:
Flags初始化标志
PD_ALLPAGES(0x00) 指定“全部”单选钮在初始时被选中(缺省标志)
PD_COLLATE(0x10) 指定“自动分页”复选框在初始时被选中
PD_DISABLEPRINTTOFILE(0x80000) 使打印到文件复选框失效
PD_ENABLEPRINTHOOK
PD_ENABLEPRINTTEMPLATE
PD_ENABLEPRINTTEMPLATEHANDLE
PD_ENABLESETUPHOOK
PD_ENABLESETUPTEMPLATE
PD_ENABLESETUPTEMPLATEHANDLE
PD_HIDEPRINTTOFILE(0x100000) 隐藏“打印到文件”复选框(缺省标志)
PD_NONETWORKBUTTON(0x200000) 隐藏网络按钮
PD_NOPAGENUMS(0x08) 使“页码范围”单选钮和开始/结束页码编辑控件失效(缺省标志)
PD_NOSELECTION(0x04) 使“选定范围”单选钮失效(缺省标志)
PD_NOWARNING(0x80) 防止系统在没有缺省打印机时显示警告消息
PD_PAGENUMS(0x02) 指定“页码范围”单选钮在初始时被选中,若返回时该标志位被设置,则nFromPage与nFromPage中为用户设置的开始与结束页码
PD_PRINTSETUP(0x40) 使系统显示打印设置对话框而不是打印对话框
PD_PRINTTOFILE(0x20) 指定“打印到文件”复选框在初始时被选中
PD_RETURNDC(0x100) 使打印对话框返回与用户选择相匹配的DC到hDC成员
PD_RETURNDEFAULT(0x400) 不显示打印对话框,将hDevNames与hDevMode分别设置为用系统缺省打印机来初始化的结构DEVMODE与DEVNAMES的句柄
PD_RETURNIC(0x200) 使打印对话框返回与用户选择相匹配的IC到hDC成员
PD_SELECTION(0x01) 指定“选定范围”单选钮在初始时被选中
PD_SHOWHELP(0x800) 使对话框显示帮助按钮,在用户单击帮助按钮时对话框会发送HELPMSGSTRING注册消息,hwndOwner成员必须指定接受该消息的窗口
PD_USEDEVMODECOPIES(0x40000) 同PD_USEDEVMODECOPIESANDCOLLATE
PD_USEDEVMODECOPIESANDCOLLATE(0x40000) 指定你的应用程序不支持多份打印与自动分页(缺省标志)。此时PRINTDLG结构的nCopies成员总是返回1,而且PD_COLLATE决不被设置
举例:
PRINTDLG pd ; memset( &pd, 0, sizeof( PRINTDLG ) ) ; pd.lStructSize = sizeof( PRINTDLG ) ; pd.hwndOwner = m_hWnd ; pd.hDevMode = m_hDevMode ; pd.hDevNames = m_hDevNames ; pd.hDC = NULL ; pd.Flags = PD_RETURNDC | PD_SELECTION | PD_NOPAGENUMS | PD_COLLATE ; pd.nFromPage = 0 ; pd.nToPage = 0 ; pd.nMinPage = 0 ; pd.nMaxPage = 0 ; pd.nCopies = 1 ; pd.hInstance = NULL ; pd.lCustData = 0L ; pd.lpfnPrintHook = NULL ; pd.lpfnSetupHook = NULL ; pd.lpPrintTemplateName = NULL ; pd.lpSetupTemplateName = NULL ; pd.hPrintTemplate = NULL ; pd.hSetupTemplate = NULL ; if ( !PrintDlg( &pd ) ) return 0 ; if ( NULL != pd.hDevMode ) ::GlobalFree( pd.hDevMode ) ; if ( NULL != pd.hDevNames ) ::GlobalFree( pd.hDevNames ) ;
效果:
再来一个例子:
PRINTDLG pd ; memset( &pd, 0, sizeof( PRINTDLG ) ) ; pd.lStructSize = sizeof( PRINTDLG ) ; pd.Flags = PD_PRINTSETUP ; pd.hDevMode = m_hDevMode ; pd.hDevNames = m_hDevNames ; if ( PrintDlg( &pd ) ) { m_hDevMode = pd.hDevMode ; m_hDevNames = pd.hDevNames ; }
以上是关于PRINTDLG 打印对话框操作的主要内容,如果未能解决你的问题,请参考以下文章