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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM