版面設定對話方塊
顯示強制回應對話方塊,允許使用者設定列印頁面的下列屬性:
- 紙張類型 (信封、法律、信件等等)
- 紙張來源 (手動摘要、活頁紙、工作表摘要器等等)
- 頁面方向 (直向或橫向)
- 頁面邊界的寬度
您可以藉由初始化PAGESETUPDLG結構並將結構傳遞至PageSetupDlg函式,來建立及顯示[頁面設定] 對話方塊。 不過,對話方塊中顯示的屬性會根據印表機的功能而有所不同。 下圖顯示典型的 [頁面設定 ] 對話方塊。
如果使用者按一下 [確定] 按鈕,PageSetupDlg會在設定PAGESETUPDLG結構中的各種成員以指定使用者的選取範圍之後,傳回TRUE。 ptPaperSize和rtMargin成員包含使用者指定的值。 hDevMode和hDevNames成員包含DEVMODE和DEVNAMES結構的全域記憶體控制碼。 這些結構包含其他頁面資訊,以及印表機的相關資訊。 您可以使用這項資訊來準備要傳送至所選印表機的輸出。
如果使用者取消 [ 頁面設定 ] 對話方塊或發生錯誤, PageSetupDlg 會傳回 FALSE。 若要判斷錯誤的原因,請呼叫 CommDlgExtendedError 函式以擷取擴充的錯誤值。
本節討論下列主題。
初始化頁面設定對話方塊
根據預設,[ 頁面設定 ] 對話方塊會顯示目前預設印表機的相關資訊。 若要指示對話方塊顯示特定印表機的相關資訊,請設定 DEVMODE 或 DEVNAMES 結構的成員,並將這些結構的全域記憶體控制碼指派給 PAGESETUPDLG中的對應成員。 如果您指定目前未安裝的印表機名稱,對話方塊會顯示錯誤訊息。 若要防止對話方塊顯示錯誤訊息,請使用 PSD_NOWARNING 值。 若要擷取預設印表機的相關資訊而不顯示 [ 頁面設定 ] 對話方塊,請使用 PSD_RETURNDEFAULT 值。
如果預設度量系統為英吋,對話方塊會使用千分之一英吋做為預設度量單位。 如果預設度量系統是計量,對話方塊會使用數百公釐做為預設度量單位。 若要覆寫預設度量單位,請在PAGESETUPDLG結構的Flags成員中設定PSD_INHUNDREDTHSOFMILLIMETERS或PSD_INTHOUSANDTHSOFINCHES旗標。
邊界的初始值預設為 1 英吋。 如果您設定 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 攔截程式,以自訂 [ 頁面設定 ] 對話方塊所顯示之範例頁面的內容。 如需 PagePaintHook 攔截程式的詳細資訊,請參閱 自訂範例頁面。
啟用 PageSetupHook 攔截程式
- 在PAGESETUPDLG結構的Flags成員中設定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 , (WM_PSD_PAGESETUPDLG、 WM_PSD_FULLPAGERECT或 WM_PSD_MINMARGINRECT) 對話方塊不會再傳送任何訊息,而且下次系統需要重新繪製範例頁面之前,才會在範例頁面中繪製。 如果這三則訊息的攔截程式傳回 FALSE ,對話方塊會傳送繪圖序列的其餘訊息。
如果勾點程式針對繪圖順序中剩餘的任何訊息傳回 TRUE ,對話方塊就不會繪製範例頁面的對應部分。 如果這些訊息的攔截程式傳回 FALSE ,對話方塊會繪製範例頁面的該部分。
若要防止對話方塊繪製範例頁面的內容,您可以設定 PSD_DISABLEPAGEPAINTING 旗標。 此旗標不會影響 您的 PagePaintHook 攔截程式,該程式仍會收到所有 WM_PSD_* 訊息,並可繪製範例頁面內容。