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 成員會指出用戶的輸入。
如果輸入上的 hDevMode 為 NULL,PrintDlg 會為 DEVMODE 結構配置記憶體、初始化其成員以指出使用者的輸入,並傳回識別它的句柄。
如果指定印表機的設備驅動器不支援擴充裝置模式,當 PrintDlg 傳回時,hDevMode 為 NULL。
如果 DEVMODE 結構的 dmDeviceName 成員所指定的裝置名稱 () 不會出現在 WIN.INI 的 [devices] 區段中,PrintDlg 會傳回錯誤。
如需 hDevMode 和 hDevNames 成員的詳細資訊,請參閱本主題結尾的一節。
hDevNames
類型: HGLOBAL
包含 DEVNAMES 結構的可移動全域記憶體物件的句柄。 如果 輸入上的 hDevNames 不是 NULL ,您必須為 DEVNAMES 結構配置可移動的記憶體區塊,並初始化其成員。 PrintDlg 函式會使用輸入數據來初始化對話框中的控件。 當 PrintDlg 傳回時,DEVNAMES 成員會包含使用者所選印表機的資訊。 您可以使用這項資訊來建立裝置內容或信息內容。
hDevNames 成員可以是 NULL,在此情況下,PrintDlg 會為 DEVNAMES 結構配置記憶體、初始化其成員以指出使用者的輸入,並傳回識別它的句柄。
如需 hDevMode 和 hDevNames 成員的詳細資訊,請參閱本主題結尾的一節。
hDC
類型: HDC
裝置內容或信息內容的句柄,視 Flags 成員指定 PD_RETURNDC 或 PC_RETURNIC 旗標而定。 如果未指定任何旗標,則這個成員的值是未定義的。 如果指定這兩個旗標, PD_RETURNDC 具有優先權。
Flags
類型: DWORD
初始化 [ 列印] 對話框。 當對話框傳回時,它會設定這些旗標來指出用戶的輸入。 這個成員可以是下列一或多個值。
值 | 意義 |
---|---|
|
表示一開始選取 [ 所有] 單選按鈕的預設旗標。 此旗標會當做佔位符來表示未指定 PD_PAGENUMS 和 PD_SELECTION 旗標。 |
|
如果設定此旗標,則會選取 [ 定序 ] 複選框。
如果 當 PrintDlg 函式傳回時設定此旗標,應用程式必須模擬多個複本的定序。 如需詳細資訊,請參閱 PD_USEDEVMODECOPIESANDCOLLATE 旗標的描述。 請參閱 PD_NOPAGENUMS。 |
|
停用 [ 列印到檔案 ] 複選框。 |
|
啟用 lpfnPrintHook 成員中指定的攔截程式。 這會啟用 [ 列印 ] 對話框的勾點程式。 |
|
指出 hInstance 和 lpPrintTemplateName 成員會指定預設 [列印 ] 對話框範本的取代專案。 |
|
指出 hPrintTemplate 成員會識別包含預先載入對話框範本的數據區塊。 此樣本會取代 [ 列印 ] 對話框的預設範本。 如果指定此旗標,系統會忽略 lpPrintTemplateName 成員。 |
|
啟用 lpfnSetupHook 成員中指定的攔截程式。 這會啟用 [ 列印設定 ] 對話框的勾點程式。 |
|
指出 hInstance 和 lpSetupTemplateName 成員會指定預設 [列印安裝 ] 對話框範本的取代專案。 |
|
指出 hSetupTemplate 成員會識別包含預先載入對話框範本的數據區塊。 此樣本會取代 [ 列印設定 ] 對話框的預設範本。 如果指定此旗標,系統會忽略 lpSetupTemplateName 成員。 |
|
隱藏 [ 列印到檔案 ] 複選框。 |
|
隱藏並停用 [ 網络 ] 按鈕。 |
|
停用 Pages 單選按鈕和相關聯的編輯控制件。 此外,它會導致對話框中出現 [ 定序 ] 複選框。 |
|
停用 [ 選取範圍 ] 單選按鈕。 |
|
當沒有預設印表機時,防止顯示警告訊息。 |
|
如果設定此旗標,則會選取 [頁面 ] 單選按鈕。 如果在 PrintDlg 函式傳回時設定此旗標, nFromPage 和 nToPage 成員會指出使用者指定的開始和結束頁面。 |
|
讓系統顯示 [ 列印安裝 ] 對話框,而不是 [ 列印 ] 對話框。 |
|
如果設定此旗標,則會選取 [ 列印至檔案 ] 複選框。 如果當 PrintDlg 函式傳回時設定此旗標,則 DEVNAMES 結構的 wOutputOffset 成員所表示的位移包含字串 “FILE:”。 當您呼叫 StartDoc 函式以啟動列印作業時,請在 DOCINFO 結構的 lpszOutput 成員中指定這個 “FILE:” 字串。 指定此字串會導致列印子系統查詢使用者輸入輸出檔的名稱。 |
|
導致 PrintDlg 傳回符合使用者在對話框中所做的選取範圍的裝置內容。 裝置內容會在 hDC 中傳回。 |
|
如果設定此旗標, PrintDlg 函式就不會顯示對話框。 相反地,它會設定 hDevNames 和 hDevMode 成員來處理系統預設印表機初始化的 DEVMODE 和 DEVNAMES 結構。 hDevNames 和 hDevMode 都必須是 NULL,否則 PrintDlg 會傳回錯誤。 |
|
與 PD_RETURNDC 旗標類似,但此旗標會傳回信息內容,而不是裝置內容。 如果未 指定PD_RETURNDC 或 PD_RETURNIC ,則輸出上未定義 hDC 。 |
|
如果設定此旗標,則會選取 [ 選取範圍 ] 單選按鈕。 如果未 設定PD_PAGENUMS 或 PD_SELECTION ,則會選取 [ 所有] 單選按鈕。 |
|
導致對話框顯示 [ 說明 ] 按鈕。 hwndOwner 成員必須指定視窗,以接收當使用者按兩下 [說明] 按鈕時,對話框所傳送的 HELPMSGSTRING 已註冊訊息。 |
|
與 PD_USEDEVMODECOPIESANDCOLLATE相同。 |
|
此旗標指出您的應用程式是否支援多個複本和定序。 在輸入上設定此旗標,表示您的應用程式不支援多個複本和定序。 在此情況下,PRINTDLG 結構的 nCopies 成員一律會傳回 1,而且永遠不會在 Flags 成員中設定PD_COLLATE。
如果未設定此旗標,應用程式會負責列印和定序多個複本。 在此情況下,PRINTDLG 結構的 nCopies 成員會指出使用者想要列印的複本數目,而 Flags 成員中的PD_COLLATE旗標會指出使用者是否想要定序。 無論是否已設定此旗標,應用程式都可以從 nCopies 判斷,並 PD_COLLATE 要轉譯的複本數目,以及是否要列印它們定序。 如果已設定此旗標,且列印機驅動程式不支援多個複本,則會停用 [複製 ] 編輯控件。 同樣地,如果已設定此旗標,且印表機驅動程序不支援定序,則會停用 [定序 ] 複選框。 DEVMODE 結構的 dmCopies 和 dmCollate 成員包含印表機驅動程式所使用的複本和定序資訊。 如果已設定此旗標,且列印機驅動程式支援多個複本, dmCopies 成員會指出使用者所要求的複本數目。 如果已設定此旗標,且印表機驅動程序支援定序,DEVMODE 結構的 dmCollate 成員會指出使用者是否想要定序。 如果未設定此旗標, dmCopies 成員一律會傳回 1,而 dmCollate 成員一律為零。 Windows 2000/XP/2003 的已知問題: 如果在呼叫 PrintDlg 之前未設定此旗標, PrintDlg 可能會在傳回時交換 nCopies 和 dmCopies 值。 此問題的因應措施是,如果其值大於 1,否則請使用 nCopies,讓您取得 PrintDlg 傳回時要列印的實際複本數目。 |
若要確保 PrintDlg 或 PrintDlgEx 會傳回 DEVMODE 結構之 dmCopies 和 dmCollate 成員中的正確值,請設定 PD_RETURNDC = TRUE,並PD_USEDEVMODECOPIESANDCOLLATE = TRUE。 如此一來,PRINTDLG 結構的 nCopies 成員一律為 1,PD_COLLATE一律為 FALSE。
若要確保 PrintDlg 或 PrintDlgEx 傳回 nCopies 和 PD_COLLATE中的正確值,請設定 PD_RETURNDC = TRUE 和 PD_USEDEVMODECOPIESANDCOLLATE = FALSE。 如此一來, dmCopies 一律為 1,dmCollate 一律為 FALSE。
在 Windows Vista 和 Windows 7 上,當您呼叫 PrintDlg 或 PrintDlgEx 並將 PD_RETURNDC設定為 TRUE 且PD_USEDEVMODECOPIESANDCOLLATE設定為 FALSE 時,PrintDlg 或 PrintDlgEx 函式會設定 PRINTDLG 結構的 nCopies 成員中的複本數目,並設定 PRINTDLG 結構 hDC 成員所代表的結構中的複本數目。
呼叫 GDI 時,您必須忽略 nCopies 的值、將值視為 1,並使用傳回的 hDC 來避免列印重複的複本。
nFromPage
類型: WORD
起始頁面編輯控件的初始值。
當 PrintDlg 傳回時, nFromPage 是使用者指定的起始頁面。 如果使用者按下 [確定] 按鈕時選取 [頁面] 單選按鈕,PrintDlg 會設定PD_PAGENUMS旗標,而且不會在使用者輸入最小到最大頁面範圍的起始頁面值之前傳回 。
如果 nFromPage 或 nToPage 的輸入值超出最小/最大範圍,則只有在指定PD_PAGENUMS旗標時,PrintDlg 才會傳回錯誤;否則,它會顯示對話框,但會將超出範圍的值變更為最小值或最大值。
nToPage
類型: WORD
結束頁面編輯控件的初始值。 當 PrintDlg 傳回時, nToPage 是使用者指定的結束頁面。 如果使用 按下 [確定] 按鈕時選取 [頁面] 單選按鈕,PrintDlg 會設定PD_PAGENUMS旗標,且不會在使用者輸入最小到最大頁面範圍的結束頁面值之前傳回 。
nMinPage
類型: WORD
From 和 To 頁面編輯控制項中指定的頁面範圍的最小值。 如果 nMinPage 等於 nMaxPage,則會停用 Pages 單選按鈕和開始和結束頁面編輯控制件。
nMaxPage
類型: WORD
From 和 To 頁面編輯控制項中指定的頁面範圍最大值。
nCopies
類型: WORD
如果 hDevMode 為 NULL,則複製編輯控件的初始複本數目;否則,DEVMODE 結構的 dmCopies 成員會包含初始值。 當 PrintDlg 傳回時, nCopies 會包含要列印的實際複本數目。 此值取決於應用程式或印表機驅動程式是否負責列印多個複本。 如果在 Flags 成員中設定PD_USEDEVMODECOPIESANDCOLLATE旗標,則 nCopies 一律會傳回 1,印表機驅動程式負責列印多個複本。 如果未設定旗標,應用程式會負責列印 nCopies 所指定的複本數目。 如需詳細資訊,請參閱 PD_USEDEVMODECOPIESANDCOLLATE 旗標的描述。
hInstance
類型: HINSTANCE
如果在 Flags 成員中設定PD_ENABLEPRINTTEMPLATE或PD_ENABLESETUPTEMPLATE旗標,hInstance 是包含 lpPrintTemplateName 或 lpSetupTemplateName 成員所命名之對話框範本的應用程式或模組實例句柄。
lCustData
類型: LPARAM
系統傳遞給 lpfnPrintHook 或 lpfnSetupHook 成員所識別的攔截程式的應用程式定義數據。 當系統將 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 是包含對話框範本的記憶體物件句柄。 此範本會取代預設的 [列印設定] 對話框範本。
備註
如果 hDevMode 和 hDevNames 都是 NULL,PrintDlg 會使用目前的預設印表機來初始化對話方塊。 若要初始化不同印表機的對話框,請使用DEVNAMES結構的 wDeviceOffset 成員來指定印表機的名稱。
請注意,DEVMODE 結構的 dmDeviceName 成員也會指定印表機名稱。 不過, dmDeviceName 限制為 32 個字元, 而 wDeviceOffset 名稱則不是。 如果 wDeviceOffset 和 dmDeviceName 名稱不同, PrintDlg 會使用 wDeviceOffset 指定的印表機初始化對話框。
如果已設定PD_RETURNDEFAULT旗標,而且 hDevMode 和 hDevNames 都是 NULL,PrintDlg 會使用 hDevNames 和 hDevMode 成員傳回目前預設印表機的相關信息,而不顯示對話框。
注意
commdlg.h 標頭會將 PRINTDLG 定義為別名,根據 UNICODE 預處理器常數的定義,自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱 函式原型的慣例。
規格需求
最低支援的用戶端 | Windows 2000 Professional [僅限傳統型應用程式] |
最低支援的伺服器 | Windows 2000 Server [僅限桌面應用程式] |
標頭 | commdlg.h (包含 Windows.h) |
另請參閱
概念
參考