頁面設定對話框
顯示強制回應對話框,允許使用者設定列印頁面的下列屬性:
- 紙張類型(信封、法律、信件等)
- 紙張來源(手動飼料、拖拉機飼料、紙張送紙器等)
- 頁面方向(直向或橫向)
- 頁面邊界的寬度
您可以藉由 初始化 pageSETUPDLG 結構並將結構傳遞至 PageSetupDlg 函式,來建立及顯示 頁面設定 對話框。 不過,對話框中呈現的屬性會根據印表機的功能而有所不同。 下圖顯示一般 頁面設定 對話框。
如果使用者單擊 [確定] [確定] 按鈕,PageSetupDlg 在設定 PAGESETUPDLG 結構中的各種成員以指定使用者的選取項目之後,會傳回 TRUE。 ptPaperSize 和 rtMargin 成員包含使用者指定的值。 hDevMode 和 hDevNames 成員包含 DEVMODE 和 DEVNAMES 結構的全域記憶體句柄。 這些結構包含其他頁面資訊,以及印表機的相關信息。 您可以使用這項資訊來準備要傳送至所選印表機的輸出。
如果使用者取消 Page Setup 對話框或發生錯誤,PageSetupDlg 會傳回 false 。 若要判斷錯誤的原因,請呼叫 CommDlgExtendedError 函式來擷取擴充的錯誤值。
本節討論下列主題。
初始化頁面設定對話框
根據預設,[頁面設定] 對話框會顯示目前預設印表機的相關信息。 若要指示對話框顯示特定印表機的相關信息,請設定 DEVMODE 或 DEVNAMES 結構的成員,並將這些結構的全域記憶體句柄指派給 PAGESETUPDLG中的對應成員。 如果您指定目前未安裝的印表機名稱,對話框會顯示錯誤訊息。 若要防止對話框顯示錯誤訊息,請使用 PSD_NOWARNING 值。 若要擷取預設印表機的相關信息,而不顯示 [頁面設定] 對話框,請使用 PSD_RETURNDEFAULT 值。
如果預設度量系統是英吋,對話框會使用千分之一英吋作為預設度量單位。 如果預設度量系統是計量,對話框會使用十分之一公厘做為預設度量單位。 若要覆寫預設度量單位,請在pageSETUPDLG結構的 Flags成員中設定 PSD_INHUNDREDTHSOFMILLIMETERS 或 PSD_INTHOUSANDTHSOFINCHES 旗標。
邊界的初始值預設為一英吋。 如果您設定 PSD_MARGINS 旗標,對話框會顯示 rtMargin 成員中指定的初始邊界值。 用戶可以為邊界指定的預設最小值是印表機允許的最小邊界。 如果您設定 PSD_MINMARGINS 旗標,對話框會強制執行 rtMinMargin 成員中指定的最小邊界。
若要防止使用者選取特定選項,請設定下列旗標的任何組合來停用對應的控件。
旗 | 意義 |
---|---|
PSD_DISABLEMARGINS | 停用使用者輸入邊界設定的編輯控制件。 |
PSD_DISABLEORIENTATION | 停用 直向 和 橫向 單選按鈕。 |
PSD_DISABLEPAPER | 停用選取紙張大小和紙張來源的控件。 |
PSD_DISABLEPRINTER | 停用 [印表機 ] 按鈕。 |
自訂頁面設定對話框
例如,如果您想要包含應用程式唯一的其他控制件,您可以提供 頁面設定 對話框的自定義範本。 PageSetupDlg 函式會使用您的自定義範本取代預設範本。
提供頁面設定對話框的自定義範本
- 修改 Prnsetup.dlg 檔案中指定的預設範本,以建立自定義範本。 在 Dlgs.h 檔案中定義預設 頁面設定 對話框範本中使用的控件識別碼。
- 使用 PAGESETUPDLG 結構來啟用範本,如下所示:
-
如果您的自定義範本是應用程式或動態連結庫中的資源,請在 Flags 成員中設定 PSD_ENABLEPAGESETUPTEMPLATE 旗標。 使用 hInstance 和 lpPageSetupTemplateName 結構的成員來識別模組和資源名稱。
-或-
如果您的自定義範本已在記憶體中,請設定 PSD_ENABLEPAGESETUPTEMPLATEHANDLE 旗標。 使用 hPageSetupTemplate 成員來識別包含範本的記憶體物件。
-
若要篩選傳送至對話框程式的訊息,您可以提供 PageSetupHook 攔截程式。 如果您使用自定義範本來定義其他控制件,則必須提供 PageSetupHook 攔截程式來處理控件的輸入。 此外,您可以提供 PagePaintHook 攔截程式,以自定義 Page Setup 對話框所顯示範例頁面的內容。 如需 PagePaintHook 攔截程式的詳細資訊,請參閱 自定義範例頁面。
啟用PageSetupHook攔截程式
- 在 PAGESETUPDLG 結構 旗標 成員中設定 PSD_ENABLEPAGESETUPHOOK 旗標。
- 在 lpfnPageSetupHook 成員中指定攔截程式的位址。
處理其 WM_INITDIALOG 訊息之後,對話框程式會將 WM_INITDIALOG 訊息傳送至 PageSetupHook 攔截程式。 此訊息的 lParam 參數是用來初始化對話方塊之 PAGESETUPDLG 結構的指標。
自定義範例頁面
頁面設定 對話框包含範例頁面的影像,其中顯示使用者選取專案如何影響列印輸出的外觀。 影像是由代表所選紙張或信封類型的矩形所組成,而虛線矩形代表目前的邊界,以及部分(希臘文文字)字元,以顯示文字在列印頁面上的外觀。
當您呼叫 PageSetupDlg 函式時,您可以提供 PagePaintHook 攔截程式來自定義範例頁面的外觀。
啟用PagePaintHook攔截程式
- 在 PAGESETUPDLG 結構 Flags 成員中設定 PSD_ENABLEPAGEPAINTHOOK 旗標。
- 在 lpfnPagePaintHook 成員中指定攔截程序的位址。
每當對話框即將繪製範例頁面的內容時,攔截程式就會依列出的順序接收下列訊息。
消息 | 意義 |
---|---|
WM_PSD_PAGESETUPDLG | 對話框即將繪製範例頁面。 攔截程式可以使用此訊息來準備繪製範例頁面的內容。 |
WM_PSD_FULLPAGERECT | 對話框即將繪製範例頁面。 此訊息會指定範例頁面的周框。 |
WM_PSD_MINMARGINRECT | 對話框即將繪製範例頁面。 此訊息會指定邊界矩形。 |
WM_PSD_MARGINRECT | 對話框即將繪製邊界矩形。 |
WM_PSD_GREEKTEXTRECT | 對話框即將在邊界矩形內繪製希臘文文字。 |
WM_PSD_ENVSTAMPRECT | 對話框即將在信封範例頁面的信封戳記矩形中繪製。 此郵件只會傳送給信封。 |
WM_PSD_YAFULLPAGERECT | 對話框即將繪製信封範例頁面的傳回位址部分。 此郵件會傳送給信封和其他紙張大小。 |
如果勾點程式傳回繪圖序列前三個訊息中的任何一個 true TRUE (WM_PSD_PAGESETUPDLG、 WM_PSD_FULLPAGERECT或 WM_PSD_MINMARGINRECT) 對話框不會再傳送任何訊息,而且在下次系統需要重新繪製範例頁面之前,才會在範例頁面中繪製。 如果攔截程式針對這三個訊息傳回 FALSE,對話框就會傳送繪圖序列的其餘訊息。
如果勾點程式傳回 繪圖序列中任何剩餘訊息的 true,則對話方塊不會繪製範例頁面的對應部分。 如果攔截程式針對這些訊息傳回 FALSE,對話框就會繪製範例頁面的該部分。
若要防止對話框繪製範例頁面的內容,您可以設定 PSD_DISABLEPAGEPAINTING 旗標。 此旗標不會影響您的 PagePaintHook 攔截程式,此程式仍會接收所有 WM_PSD_* 訊息,並可繪製範例頁面內容。