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 ; }

