共用方式為


PRINTDLGEXW 結構 (commdlg.h)

包含 printDlgEx 函式 用來初始化 print 屬性表的資訊。 當使用者關閉屬性表之後,系統會使用此結構傳回用戶選取專案的相關信息。

語法

typedef struct tagPDEXW {
  DWORD            lStructSize;
  HWND             hwndOwner;
  HGLOBAL          hDevMode;
  HGLOBAL          hDevNames;
  HDC              hDC;
  DWORD            Flags;
  DWORD            Flags2;
  DWORD            ExclusionFlags;
  DWORD            nPageRanges;
  DWORD            nMaxPageRanges;
  LPPRINTPAGERANGE lpPageRanges;
  DWORD            nMinPage;
  DWORD            nMaxPage;
  DWORD            nCopies;
  HINSTANCE        hInstance;
  LPCWSTR          lpPrintTemplateName;
  LPUNKNOWN        lpCallback;
  DWORD            nPropertyPages;
  HPROPSHEETPAGE   *lphPropertyPages;
  DWORD            nStartPage;
  DWORD            dwResultAction;
} PRINTDLGEXW, *LPPRINTDLGEXW;

成員

lStructSize

類型:DWORD

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

hwndOwner

類型:HWND

擁有屬性表之視窗的句柄。 這個成員必須是有效的視窗句柄;無法 NULL

hDevMode

類型:HGLOBAL

包含 DEVMODE 結構的可移動全域記憶體物件的句柄。 如果輸入 hDevModeNULL,您必須為 DEVMODE 結構配置可移動的記憶體區塊,並初始化其成員。 PrintDlgEx 函式會使用輸入數據來初始化屬性表中的控制件。 PrintDlgEx 傳回時,DEVMODE 成員會指出使用者的輸入。

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

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

hDevNames

類型:HGLOBAL

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

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

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

hDC

類型:HDC

裝置內容的句柄或資訊內容,取決於 旗標 成員是否指定 PD_RETURNDCPC_RETURNIC 旗標。 如果未指定這兩個旗標,則這個成員的值是未定義的。 如果指定這兩個旗標,PD_RETURNDC 具有優先權。

Flags

類型:DWORD

一組位旗標,可用來初始化列印 屬性表 。 當 printDlgEx 函式傳回 時,它會設定這些旗標來指出使用者的輸入。 這個成員可以是下列其中一或多個值。

為了確保 printDlg 或 PrintDlgEx 會傳回 dmCopies 中的正確值,並 dmCollate DEVMODE 結構的成員,設定 PD_RETURNDCTRUEPD_USEDEVMODECOPIESANDCOLLATETRUE。 如此一來,PRINTDLG 結構的 nCopies 成員一律為 1,PD_COLLATE 一律 FALSE

為了確保 printDlg 或 PrintDlgEx 傳回 nCopiesPD_COLLATE中的正確值,請設定 true PD_RETURNDCtruePD_USEDEVMODECOPIESANDCOLLATEFALSE。 如此一來,dmCopies 一律為 1,dmCollate 一律 FALSE

從 Windows Vista 開始,當您呼叫 PrintDlgPrintDlgEx 時,PD_RETURNDC 設為 TRUE,並將 PD_USEDEVMODECOPIESANDCOLLATE 設定 為 FALSE PrintDlgPrintDlgEx 函式會設定 PRINTDLG 結構之 nCopies 成員中的複本數目, 而它會設定 PRINTDLG 結構中 hDC 成員所代表的複本數目。

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

價值 意義
PD_ALLPAGES
0x00000000
默認旗標,表示一開始選取 [所有] 單選按鈕 。 此旗標是用來表示未指定 PD_PAGENUMSPD_SELECTIONPD_CURRENTPAGE 旗標的佔位符。
PD_COLLATE
0x00000010
如果設定此旗標,則會選取 [定序] 複選框。

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

請參閱 PD_NOPAGENUMS

PD_CURRENTPAGE
0x00400000
如果設定此旗標,則會選取 [目前頁面] 單選按鈕。 如果未設定 PD_PAGENUMSPD_SELECTIONPD_CURRENTPAGE 旗標,則會選取 [所有] 單選按鈕
PD_DISABLEPRINTTOFILE
0x00080000
停用 [列印至檔案] 複選框。
PD_ENABLEPRINTTEMPLATE
0x00004000
表示 hInstancelpPrintTemplateName 成員指定取代 General 頁面下半部的預設對話框範本。 預設範本包含與 [列印] 對話框 類似的控件。 系統會使用指定的範本來建立視窗,該視窗是 [一般] 頁面的子系。
PD_ENABLEPRINTTEMPLATEHANDLE
0x00010000
表示 hInstance 成員會識別包含預先載入對話框範本的數據區塊。 此範本會取代 [一般] 頁面下半部的預設對話框範本。 系統會使用指定的範本來建立視窗,該視窗是 [一般] 頁面的子系。 如果指定此旗標,系統會忽略 lpPrintTemplateName 成員。
PD_EXCLUSIONFLAGS
0x01000000
表示 ExclusionFlags 成員會識別要從印表機驅動程式屬性頁排除的專案。 如果未設定此旗標,預設會從印表機驅動程式屬性頁排除專案。 排除專案可防止 一般 頁面、任何應用程式指定的頁面和印表機驅動程式頁面之間的項目重複。
PD_HIDEPRINTTOFILE
0x00100000
隱藏 [列印到檔案] 複選框
PD_NOCURRENTPAGE
0x00800000
停用 [目前頁面] 單選按鈕
PD_NOPAGENUMS
0x00000008
停用 Pages 單選按鈕和相關聯的編輯控制件。 此外,它會導致對話框中出現 [定序] 複選框。
PD_NOSELECTION
0x00000004
停用 [選取範圍] 單選按鈕
PD_NOWARNING
0x00000080
防止發生錯誤時顯示警告訊息。
PD_PAGENUMS
0x00000002
如果已設定此旗標,則會選取 [Pages 單選按鈕]。 如果未設定 PD_PAGENUMSPD_SELECTIONPD_CURRENTPAGE 旗標,則會選取 [所有] 單選按鈕 。 如果在 PrintDlgEx 函式傳回時設定此旗標,lpPageRanges 成員會指出使用者指定的頁面範圍。
PD_PRINTTOFILE
0x00000020
如果設定此旗標,則會選取 [列印至檔案] 複選框 。 如果在 PrintDlgEx 傳回時設定此旗標,wOutputOffset 所表示的位移DEVNAMES 結構的成員包含字符串 “FILE:”。 當您呼叫 StartDoc 函式以啟動列印作業時,請在 DOCINFO 結構 lpszOutput 中指定這個 “FILE:” 字符串。 指定此字串會導致列印子系統查詢使用者以取得輸出檔的名稱。
PD_RETURNDC
0x00000100
導致 PrintDlgEx 傳回符合使用者在屬性表中所做的選取範圍的裝置內容。 裝置內容會在 hDC中傳回。
PD_RETURNDEFAULT
0x00000400
如果設定此旗標,則 PrintDlgEx 函式 不會顯示屬性表。 相反地,它會設定 hDevNameshDevMode 成員來處理,以 DEVNAMESDEVMODE 為系統預設列印機初始化的結構。 hDevNameshDevMode 都必須 NULL,或 PrintDlgEx 傳回錯誤。
PD_RETURNIC
0x00000200
類似於 PD_RETURNDC 旗標,但這個旗標會傳回信息內容,而不是裝置內容。 如果未指定 PD_RETURNDCPD_RETURNIC輸出上未定義 hDC
PD_SELECTION
0x00000001
如果已設定此旗標,則會選取 [選取範圍] 單選按鈕 。 如果未設定 PD_PAGENUMSPD_SELECTIONPD_CURRENTPAGE 旗標,則會選取 [所有] 單選按鈕
PD_USEDEVMODECOPIES
0x00040000
PD_USEDEVMODECOPIESANDCOLLATE相同。
PD_USEDEVMODECOPIESANDCOLLATE
0x00040000
此旗標指出您的應用程式是否支援多個複本和定序。 在輸入上設定此旗標,表示您的應用程式不支援多個複本和定序。 在此情況下,nCopiesPRINTDLGEX 結構的成員一律會傳回 1,而且永遠不會在 Flags 成員中設定 PD_COLLATE

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

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

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

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

在 Windows Vista 之前的 Windows 版本中,如果呼叫的應用程式未設定此旗標,且 dmCopiesDEVMODE 結構的成員大於 1,請使用該值做為複本數目:否則,請使用 nCopiesPRINTDLGEX 結構成員的值。

PD_USELARGETEMPLATE
0x10000000
強制屬性表針對 [一般] 頁面使用大型範本。 較大的範本會為應用程式提供更多空間,這些應用程式會針對 [一般] 頁面的下半部指定自定義範本。

Flags2

類型:DWORD

ExclusionFlags

類型:DWORD

一組位旗標,可以從列印 屬性表中的印表機驅動程序屬性 頁排除專案。 只有在 Flags 成員中設定 PD_EXCLUSIONFLAGS 旗標時,才會使用此值。 只有在要排除的專案會包含在 [一般] 頁面或 [Print] 屬性表的應用程式定義頁面上時,才應該使用排除旗標。 這個成員可以指定下列旗標。

PD_EXCL_COPIESANDCOLLATE

印表 屬性表中的印表機驅動程式屬性頁排除 複製Collate 控制件。 當應用程式使用預設 複製Collate 控件時,應該一律設定此旗標,Print 屬性表 [一般] 頁面的下半部所提供。

nPageRanges

類型:DWORD

在輸入時,將此成員設定為 lpPageRanges 陣列中指定的初始頁面範圍數目。 當 printDlgEx 函式傳回 時,nPageRanges 會指出儲存在 lpPageRanges 陣列中使用者指定的頁面範圍數目。 如果指定 PD_NOPAGENUMS 旗標,這個值無效。

nMaxPageRanges

類型:DWORD

陣列元素中 lpPageRanges 緩衝區的大小。 這個值表示可以儲存在陣列中的頁面範圍數目上限。 如果指定 PD_NOPAGENUMS 旗標,這個值無效。 如果未指定 PD_NOPAGENUMS 旗標,這個值必須大於零。

lpPageRanges

類型:LPPRINTPAGERANGE

緩衝區的指標,其中包含 PRINTPAGERANGE 結構的 陣列。 在輸入時,數位包含要顯示在 Pages 編輯控制件的初始頁面範圍。 當 PrintDlgEx 函式傳回時,陣列會包含使用者指定的頁面範圍。 如果指定 PD_NOPAGENUMS 旗標,這個值無效。 如果未指定 PD_NOPAGENUMS 旗標,lpPageRanges 必須是非NULL

nMinPage

類型:DWORD

Pages 編輯控制項中指定的頁面範圍最小值。 如果指定 PD_NOPAGENUMS 旗標,這個值無效。

nMaxPage

類型:DWORD

Pages 編輯控制件中指定的頁面範圍最大值。 如果指定 PD_NOPAGENUMS 旗標,這個值無效。

nCopies

類型:DWORD

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

hInstance

類型:HINSTANCE

如果在 Flags 成員中設定 PD_ENABLEPRINTTEMPLATE 旗標,hInstance 是包含 lpPrintTemplateName 成員所命名之對話框範本的應用程式或模組實例句柄。 如果在 Flags 成員中設定 PD_ENABLEPRINTTEMPLATEHANDLE 旗標,hInstance 是包含對話框範本的記憶體物件句柄。 如果 Flags 成員中未設定兩個範本旗標,hInstance 應該 NULL

lpPrintTemplateName

類型:LPCTSTR

hInstance 成員所識別之模組中的對話框範本資源名稱。 此範本會取代 [一般] 頁面下半部的預設對話框範本。 預設範本包含與 [列印] 對話框 類似的控件。 除非在 Flags 成員中設定PD_ENABLEPRINTTEMPLATE旗標,否則會忽略此成員。

lpCallback

類型:LPUNKNOWN

應用程式定義回呼物件的指標。

對象應該包含 IPrintDialogCallback 類別,以在 General 頁面的下半部接收子對話框的訊息。

回呼物件也應該包含 IObjectWithSite 類別,以接收 IPrintDialogServices 介面的指標。 PrintDlgEx 函式會在回呼 IID_IObjectWithSiteIID_IPrintDialogCallback 物件上呼叫 IUnknown::QueryInterface,以判斷支援哪些介面。

如果您不想擷取任何回呼資訊,請將 lpCallback 設定為 NULL

nPropertyPages

類型:DWORD

lphPropertyPage s 陣列中的屬性頁句柄數目。

lphPropertyPages

類型:HPROPSHEETPAGE*

包含屬性頁句柄陣列,以新增至 Print 屬性表。 其他屬性頁會遵循 [一般] 頁面 。 使用 CreatePropertySheetPage 函式來建立這些額外的頁面。 當 printDlgEx 函式傳回 時,lphPropertyPages 陣列中的所有 HPROPSHEETPAGE 句柄都已終結。 如果 nPropertyPages 為零,lphPropertyPagesNULL

nStartPage

類型:DWORD

最初顯示的屬性頁。 若要顯示 [一般] 頁面,請指定 START_PAGE_GENERAL。 否則,請在 lphPropertyPages 成員中指定的陣列中,指定屬性頁的以零起始的索引。 為了保持一致性,建議您一律在 [一般] 頁面上啟動屬性表。

dwResultAction

類型:DWORD

在輸入上,將此成員設定為零。 如果 printDlgEx 函式 傳回S_OK,dwResultAction 包含對話框的結果。 如果 PrintDlgEx 傳回錯誤,則應該忽略此成員。 dwResultAction 成員可以是下列其中一個值。

PD_RESULT_APPLY

用戶按兩下 [套用] 按鈕,稍後按兩下 [取消] 按鈕 。 這表示使用者想要套用屬性表中所做的變更,但還不想列印。 PRINTDLGEX 結構包含使用者按兩下 [套用] 按鈕時所指定的資訊。

PD_RESULT_CANCEL

用戶按兩下 [取消] 按鈕 PRINTDLGEX 結構中的資訊不會變更。

PD_RESULT_PRINT

用戶按兩下 [列印] 按鈕 PRINTDLGEX 結構包含使用者指定的資訊。

言論

如果 hDevModehDevNamesNULLPrintDlgEx 使用目前的預設印表機初始化屬性表。 若要初始化不同印表機的屬性表,請使用 wDeviceOffsetDEVNAMES 結構的成員來指定印表機的名稱。

請注意,dmDeviceNameDEVMODE 結構的成員也會指定印表機名稱。 不過,dmDeviceName 限制為 32 個字元,且 wDeviceOffset 名稱 不是。 如果 wDeviceOffsetdmDeviceName 名稱不同,PrintDlgEx 使用 wDeviceOffset所指定的列印機來初始化屬性表。

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

在執行 PrintDlgEx期間,DEVMODEDEVNAMES 結構,您在 PRINTDLGEX 結構中指定的 不一定包含目前的數據。 因此,初始頁面的應用程式特定屬性頁以及 IPrintDialogCallback 例程應該使用 IPrintDialogServices 介面來擷取目前列印機狀態的相關信息。

注意

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

要求

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

另請參閱

通用對話框連結庫

概念

DEVMODE

DEVNAMES

IPrintDialogCallback

IPrintDialogServices

PrintDlgEx

參考