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成員會指出使用者的輸入。

如果 輸入上的 hDevModeNullPrintDlg 會為 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 都是 NullPrintDlg 會使用目前的預設印表機初始化對話方塊。 若要初始化不同印表機的對話方塊,請使用DEVNAMES結構的wDeviceOffset成員來指定印表機的名稱。

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

如果 已設定PD_RETURNDEFAULT 旗標,且 hDevModehDevNames 都是 NullPrintDlg 會使用 hDevNameshDevMode 成員傳回目前預設印表機的相關資訊,而不顯示對話方塊。

注意

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

規格需求

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

另請參閱

通用對話方塊程式庫

概念

DEVMODE

DEVNAMES

PrintDlg

參考

WM_INITDIALOG