PRINTDLGA 結構 (commdlg.h)

包含 PrintDlg 函式用來初始化 列印對話框的資訊。 使用者關閉對話框之後,系統會使用此結構來傳回用戶選取專案的相關信息。

語法

typedef struct tagPDA {
  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;
  LPCSTR          lpPrintTemplateName;
  LPCSTR          lpSetupTemplateName;
  HGLOBAL         hPrintTemplate;
  HGLOBAL         hSetupTemplate;
} PRINTDLGA, *LPPRINTDLGA;

成員

lStructSize

類型: DWORD

結構大小,以位元組為單位。

hwndOwner

類型: HWND

擁有對話框之視窗的句柄。 此成員可以是任何有效的視窗句柄,如果對話框沒有擁有者,則為 NULL

hDevMode

類型: HGLOBAL

包含 DEVMODE 結構的可移動全域記憶體物件的句柄。 如果 輸入時 hDevMode 不是 NULL ,您必須為 DEVMODE 結構配置可移動的記憶體區塊,並初始化其成員。 PrintDlg 函式會使用輸入數據來初始化對話框中的控件。 當 PrintDlg 傳回時,DEVMODE 成員會指出用戶的輸入。

如果輸入上的 hDevModeNULL,PrintDlg 會為 DEVMODE 結構配置記憶體、初始化其成員以指出使用者的輸入,並傳回識別它的句柄。

如果指定印表機的設備驅動器不支援擴充裝置模式,當 PrintDlg 傳回時,hDevModeNULL

如果 DEVMODE 結構的 dmDeviceName 成員所指定的裝置名稱 () 不會出現在 WIN.INI 的 [devices] 區段中,PrintDlg 會傳回錯誤。

如需 hDevModehDevNames 成員的詳細資訊,請參閱本主題結尾的一節。

hDevNames

類型: HGLOBAL

包含 DEVNAMES 結構的可移動全域記憶體物件的句柄。 如果 輸入上的 hDevNames 不是 NULL ,您必須為 DEVNAMES 結構配置可移動的記憶體區塊,並初始化其成員。 PrintDlg 函式會使用輸入數據來初始化對話框中的控件。 當 PrintDlg 傳回時,DEVNAMES 成員會包含使用者所選印表機的資訊。 您可以使用這項資訊來建立裝置內容或信息內容。

hDevNames 成員可以是 NULL,在此情況下,PrintDlg 會為 DEVNAMES 結構配置記憶體、初始化其成員以指出使用者的輸入,並傳回識別它的句柄。

如需 hDevModehDevNames 成員的詳細資訊,請參閱本主題結尾的一節。

hDC

類型: HDC

裝置內容或信息內容的句柄,視 Flags 成員指定 PD_RETURNDCPC_RETURNIC 旗標而定。 如果未指定任何旗標,則這個成員的值是未定義的。 如果指定這兩個旗標, PD_RETURNDC 具有優先權。

Flags

類型: DWORD

初始化 [ 列印] 對話框。 當對話框傳回時,它會設定這些旗標來指出用戶的輸入。 這個成員可以是下列一或多個值。

意義
PD_ALLPAGES
0x00000000
表示一開始選取 [ 所有] 單選按鈕的預設旗標。 此旗標會當做佔位符來表示未指定 PD_PAGENUMSPD_SELECTION 旗標。
PD_COLLATE
0x00000010
如果設定此旗標,則會選取 [ 定序 ] 複選框。

如果 當 PrintDlg 函式傳回時設定此旗標,應用程式必須模擬多個複本的定序。 如需詳細資訊,請參閱 PD_USEDEVMODECOPIESANDCOLLATE 旗標的描述。

請參閱 PD_NOPAGENUMS

PD_DISABLEPRINTTOFILE
0x00080000
停用 [ 列印到檔案 ] 複選框。
PD_ENABLEPRINTHOOK
0x00001000
啟用 lpfnPrintHook 成員中指定的攔截程式。 這會啟用 [ 列印 ] 對話框的勾點程式。
PD_ENABLEPRINTTEMPLATE
0x00004000
指出 hInstancelpPrintTemplateName 成員會指定預設 [列印 ] 對話框範本的取代專案。
PD_ENABLEPRINTTEMPLATEHANDLE
0x00010000
指出 hPrintTemplate 成員會識別包含預先載入對話框範本的數據區塊。 此樣本會取代 [ 列印 ] 對話框的預設範本。 如果指定此旗標,系統會忽略 lpPrintTemplateName 成員。
PD_ENABLESETUPHOOK
0x00002000
啟用 lpfnSetupHook 成員中指定的攔截程式。 這會啟用 [ 列印設定 ] 對話框的勾點程式。
PD_ENABLESETUPTEMPLATE
0x00008000
指出 hInstancelpSetupTemplateName 成員會指定預設 [列印安裝 ] 對話框範本的取代專案。
PD_ENABLESETUPTEMPLATEHANDLE
0x00020000
指出 hSetupTemplate 成員會識別包含預先載入對話框範本的數據區塊。 此樣本會取代 [ 列印設定 ] 對話框的預設範本。 如果指定此旗標,系統會忽略 lpSetupTemplateName 成員。
PD_HIDEPRINTTOFILE
0x00100000
隱藏 [ 列印到檔案 ] 複選框。
PD_NONETWORKBUTTON
0x00200000
隱藏並停用 [ 網络 ] 按鈕。
PD_NOPAGENUMS
0x00000008
停用 Pages 單選按鈕和相關聯的編輯控制件。 此外,它會導致對話框中出現 [ 定序 ] 複選框。
PD_NOSELECTION
0x00000004
停用 [ 選取範圍 ] 單選按鈕。
PD_NOWARNING
0x00000080
當沒有預設印表機時,防止顯示警告訊息。
PD_PAGENUMS
0x00000002
如果設定此旗標,則會選取 [頁面 ] 單選按鈕。 如果在 PrintDlg 函式傳回時設定此旗標, nFromPagenToPage 成員會指出使用者指定的開始和結束頁面。
PD_PRINTSETUP
0x00000040
讓系統顯示 [ 列印安裝 ] 對話框,而不是 [ 列印 ] 對話框。
PD_PRINTTOFILE
0x00000020
如果設定此旗標,則會選取 [ 列印至檔案 ] 複選框。 如果當 PrintDlg 函式傳回時設定此旗標,則 DEVNAMES 結構的 wOutputOffset 成員所表示的位移包含字串 “FILE:”。 當您呼叫 StartDoc 函式以啟動列印作業時,請在 DOCINFO 結構的 lpszOutput 成員中指定這個 “FILE:” 字串。 指定此字串會導致列印子系統查詢使用者輸入輸出檔的名稱。
PD_RETURNDC
0x00000100
導致 PrintDlg 傳回符合使用者在對話框中所做的選取範圍的裝置內容。 裝置內容會在 hDC 中傳回。
PD_RETURNDEFAULT
0x00000400
如果設定此旗標, PrintDlg 函式就不會顯示對話框。 相反地,它會設定 hDevNameshDevMode 成員來處理系統預設印表機初始化的 DEVMODEDEVNAMES 結構。 hDevNameshDevMode 都必須是 NULL,否則 PrintDlg 會傳回錯誤。
PD_RETURNIC
0x00000200
PD_RETURNDC 旗標類似,但此旗標會傳回信息內容,而不是裝置內容。 如果未 指定PD_RETURNDCPD_RETURNIC ,則輸出上未定義 hDC
PD_SELECTION
0x00000001
如果設定此旗標,則會選取 [ 選取範圍 ] 單選按鈕。 如果未 設定PD_PAGENUMSPD_SELECTION ,則會選取 [ 所有] 單選按鈕。
PD_SHOWHELP
0x00000800
導致對話框顯示 [ 說明 ] 按鈕。 hwndOwner 成員必須指定視窗,以接收當使用者按兩下 [說明] 按鈕時,對話框所傳送的 HELPMSGSTRING 已註冊訊息。
PD_USEDEVMODECOPIES
0x00040000
PD_USEDEVMODECOPIESANDCOLLATE相同。
PD_USEDEVMODECOPIESANDCOLLATE
0x00040000
此旗標指出您的應用程式是否支援多個複本和定序。 在輸入上設定此旗標,表示您的應用程式不支援多個複本和定序。 在此情況下,PRINTDLG 結構的 nCopies 成員一律會傳回 1,而且永遠不會在 Flags 成員中設定PD_COLLATE

如果未設定此旗標,應用程式會負責列印和定序多個複本。 在此情況下,PRINTDLG 結構的 nCopies 成員會指出使用者想要列印的複本數目,而 Flags 成員中的PD_COLLATE旗標會指出使用者是否想要定序。

無論是否已設定此旗標,應用程式都可以從 nCopies 判斷,並 PD_COLLATE 要轉譯的複本數目,以及是否要列印它們定序。

如果已設定此旗標,且列印機驅動程式不支援多個複本,則會停用 [複製 ] 編輯控件。 同樣地,如果已設定此旗標,且印表機驅動程序不支援定序,則會停用 [定序 ] 複選框。

DEVMODE 結構的 dmCopiesdmCollate 成員包含印表機驅動程式所使用的複本和定序資訊。 如果已設定此旗標,且列印機驅動程式支援多個複本, dmCopies 成員會指出使用者所要求的複本數目。 如果已設定此旗標,且印表機驅動程序支援定序,DEVMODE 結構的 dmCollate 成員會指出使用者是否想要定序。 如果未設定此旗標, dmCopies 成員一律會傳回 1,而 dmCollate 成員一律為零。

Windows 2000/XP/2003 的已知問題: 如果在呼叫 PrintDlg 之前未設定此旗標, PrintDlg 可能會在傳回時交換 nCopiesdmCopies 值。 此問題的因應措施是,如果其值大於 1,否則請使用 nCopies,讓您取得 PrintDlg 傳回時要列印的實際複本數目。

 

若要確保 PrintDlg 或 PrintDlgEx 會傳回 DEVMODE 結構之 dmCopiesdmCollate 成員中的正確值,請設定 PD_RETURNDC = TRUE,並PD_USEDEVMODECOPIESANDCOLLATE = TRUE。 如此一來,PRINTDLG 結構的 nCopies 成員一律為 1,PD_COLLATE一律FALSE

若要確保 PrintDlg 或 PrintDlgEx 傳回 nCopiesPD_COLLATE中的正確值,請設定 PD_RETURNDC = TRUEPD_USEDEVMODECOPIESANDCOLLATE = FALSE 如此一來, dmCopies 一律為 1,dmCollate 一律為 FALSE

在 Windows Vista 和 Windows 7 上,當您呼叫 PrintDlg 或 PrintDlgEx 並將 PD_RETURNDC設定為 TRUEPD_USEDEVMODECOPIESANDCOLLATE設定為 FALSE 時,PrintDlgPrintDlgEx 函式會設定 PRINTDLG 結構的 nCopies 成員中的複本數目,並設定 PRINTDLG 結構 hDC 成員所代表的結構中的複本數目。

呼叫 GDI 時,您必須忽略 nCopies 的值、將值視為 1,並使用傳回的 hDC 來避免列印重複的複本。

nFromPage

類型: WORD

起始頁面編輯控件的初始值。

PrintDlg 傳回時, nFromPage 是使用者指定的起始頁面。 如果使用者按下 [確定] 按鈕時選取 [頁面] 單選按鈕,PrintDlg 會設定PD_PAGENUMS旗標,而且不會在使用者輸入最小到最大頁面範圍的起始頁面值之前傳回 。

如果 nFromPagenToPage 的輸入值超出最小/最大範圍,則只有在指定PD_PAGENUMS旗標時,PrintDlg 才會傳回錯誤;否則,它會顯示對話框,但會將超出範圍的值變更為最小值或最大值。

nToPage

類型: WORD

結束頁面編輯控件的初始值。 當 PrintDlg 傳回時, nToPage 是使用者指定的結束頁面。 如果使用 按下 [確定] 按鈕時選取 [頁面] 單選按鈕,PrintDlg 會設定PD_PAGENUMS旗標,且不會在使用者輸入最小到最大頁面範圍的結束頁面值之前傳回 。

nMinPage

類型: WORD

FromTo 頁面編輯控制項中指定的頁面範圍的最小值。 如果 nMinPage 等於 nMaxPage,則會停用 Pages 單選按鈕和開始和結束頁面編輯控制件。

nMaxPage

類型: WORD

FromTo 頁面編輯控制項中指定的頁面範圍最大值。

nCopies

類型: WORD

如果 hDevModeNULL,則複製編輯控件的初始複本數目;否則,DEVMODE 結構的 dmCopies 成員會包含初始值。 當 PrintDlg 傳回時, nCopies 會包含要列印的實際複本數目。 此值取決於應用程式或印表機驅動程式是否負責列印多個複本。 如果在 Flags 成員中設定PD_USEDEVMODECOPIESANDCOLLATE旗標,則 nCopies 一律會傳回 1,印表機驅動程式負責列印多個複本。 如果未設定旗標,應用程式會負責列印 nCopies 所指定的複本數目。 如需詳細資訊,請參閱 PD_USEDEVMODECOPIESANDCOLLATE 旗標的描述。

hInstance

類型: HINSTANCE

如果在 Flags 成員中設定PD_ENABLEPRINTTEMPLATEPD_ENABLESETUPTEMPLATE旗標,hInstance 是包含 lpPrintTemplateName 或 lpSetupTemplateName 成員所命名之對話框範本的應用程式或模組實例句柄。

lCustData

類型: LPARAM

系統傳遞給 lpfnPrintHooklpfnSetupHook 成員所識別的攔截程式的應用程式定義數據。 當系統將 WM_INITDIALOG 訊息傳送至攔截程式時,訊息的 lParam 參數是建立對話框時所指定的 PRINTDLG 結構的指標。 攔截程式可以使用這個指標來取得 lCustData 值。

lpfnPrintHook

類型: LPPRINTHOOKPROC

PrintHookProc 攔截程式的指標,可處理適用於 [列印] 對話框的訊息。 除非在 Flags 成員中設定PD_ENABLEPRINTHOOK旗標,否則會忽略這個成員。

lpfnSetupHook

類型: LPSETUPHOOKPROC

SetupHookProc 攔截程式的指標,可處理適用於 [列印安裝] 對話框的訊息。 除非在 Flags 成員中設定PD_ENABLESETUPHOOK旗標,否則會忽略這個成員。

lpPrintTemplateName

類型: LPCTSTR

hInstance 成員所識別模組中的對話框範本資源名稱。 此範本會取代預設的 [列印 ] 對話框範本。 除非在 Flags 成員中設定PD_ENABLEPRINTTEMPLATE旗標,否則會忽略此成員。

lpSetupTemplateName

類型: LPCTSTR

hInstance 成員所識別模組中的對話框範本資源名稱。 此樣本會取代預設的 [列印安裝 ] 對話框範本。 除非在 Flags 成員中設定PD_ENABLESETUPTEMPLATE旗標,否則會忽略這個成員。

hPrintTemplate

類型: HGLOBAL

如果在 Flags 成員中設定PD_ENABLEPRINTTEMPLATEHANDLE旗標,hPrintTemplate 是包含對話框範本的記憶體物件句柄。 此範本會取代預設的 [列印 ] 對話框範本。

hSetupTemplate

類型: HGLOBAL

如果在 Flags 成員中設定PD_ENABLESETUPTEMPLATEHANDLE旗標,hSetupTemplate 是包含對話框範本的記憶體物件句柄。 此範本會取代預設的 [列印設定] 對話框範本。

備註

如果 hDevModehDevNames 都是 NULL,PrintDlg 會使用目前的預設印表機來初始化對話方塊。 若要初始化不同印表機的對話框,請使用DEVNAMES結構的 wDeviceOffset 成員來指定印表機的名稱。

請注意,DEVMODE 結構的 dmDeviceName 成員也會指定印表機名稱。 不過, dmDeviceName 限制為 32 個字元, 而 wDeviceOffset 名稱則不是。 如果 wDeviceOffsetdmDeviceName 名稱不同, PrintDlg 會使用 wDeviceOffset 指定的印表機初始化對話框。

如果已設定PD_RETURNDEFAULT旗標,而且 hDevModehDevNames 都是 NULL,PrintDlg 會使用 hDevNameshDevMode 成員傳回目前預設印表機的相關信息,而不顯示對話框。

注意

commdlg.h 標頭會將 PRINTDLG 定義為別名,根據 UNICODE 預處理器常數的定義,自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱 函式原型的慣例

規格需求

   
最低支援的用戶端 Windows 2000 Professional [僅限傳統型應用程式]
最低支援的伺服器 Windows 2000 Server [僅限桌面應用程式]
標頭 commdlg.h (包含 Windows.h)

另請參閱

通用對話框連結庫

概念

DEVMODE

DEVNAMES

PrintDlg

參考

WM_INITDIALOG