列印屬性表
Print 屬性表是標準使用者介面,可讓使用者指定特定列印作業的屬性。 屬性表是由一組依印表機或應用程式而異的屬性頁所組成。 針對標準 Windows 屬性頁的子集,有些印表機可能會新增驅動程式特定的屬性頁,有些應用程式可能會新增應用程式特定的屬性頁。
若要建立及顯示 Print 屬性表,請初始化 PRINTDLGEX 結構,並將 結構傳遞至 printDlgEx函式。
下圖顯示一般 Print 屬性表。
PRINTDLGEX 結構的大部分成員都與 PRINTDLG結構的相同。 如需如何使用通用結構成員與對話框控制項互動的描述,請參閱 列印對話框。 本主題的其餘部分描述 Print 屬性表功能,這些功能不同於 列印 對話框。
您可以為 [一般] 頁面的下半部指定自定義對話框範本,並指定其他屬性頁,以遵循 [一般] 頁面,來自定義 列印 屬性表。 如需詳細資訊,請參閱 自定義列印屬性表。
您可以實作回呼物件,以在顯示屬性表時,從 PrintDlgEx 函式接收通知和訊息。 提供自訂範本或其他頁面的應用程式會使用回呼對象與屬性表通訊。 如需詳細資訊,請參閱 print 屬性表 的Callback 物件。
Print 屬性表支援指定要列印的多個非連續頁面範圍。 lpPageRangesPRINTDLGEX 結構的成員指定一個 PRINTPAGERANGE 結構體陣列,其中每個結構體指定一個頁面範圍。
Print 屬性表會顯示 目前頁面 單選按鈕,做為單選按鈕 頁面範圍 群組的一部分。 若要控制 目前頁面 單選按鈕,請使用 PRINTDLGEX結構之 Flags成員中的 PD_CURRENTPAGE 和 PD_NOCURRENTPAGE 旗標。
本節討論下列主題。
自定義列印屬性表
您可以透過下列方式自訂 Print 屬性表:
- 提供 一般 頁面下半部的自定義範本。 這可讓您包含應用程式唯一的其他控制件。 PrintDlgEx 函式會使用您的自定義範本取代預設範本。
- 提供其他屬性頁,以遵循 [一般] 頁面。
- 提供回呼物件。 如需詳細資訊,請參閱 print 屬性表 的Callback 物件。
您無法變更 [一般] 頁面的上半部。 您無法變更印表機驅動程式所提供的屬性頁。
若要提供 [一般] 頁面的自訂範本:
修改 Prnsetup.dlg 檔案中指定的 PRINTDLGEXORD 範本,為 General 頁面的下半部建立自定義範本。 一般而言,自定義範本的大小必須與默認範本相同。 如果您指定 PD_USELARGETEMPLATE 旗標來建立較大的 一般 頁面,您就可以放大此自訂範本。 在 Dlgs.h 檔案中定義預設 列印 對話框範本中使用的控件識別碼。
使用 PRINTDLGEX 結構來啟用範本,如下所示:
如果您的自定義範本是應用程式或動態連結庫中的資源,請在 Flags 成員中設定 PD_ENABLEPRINTTEMPLATE 旗標。 使用 hInstance 和 lpPrintTemplateName 結構的成員來識別模組和資源名稱。
-或-
如果您的自定義範本已在記憶體中,請設定 PD_ENABLEPRINTTEMPLATEHANDLE 旗標。 使用 hInstance 成員來識別包含範本的記憶體物件。
如果您使用自定義範本來定義其他控制件,則必須提供回呼對象來處理控件的輸入。 回呼物件會實作 IPrintDialogCallback::HandleMessage 方法,以接收傳送至自定義對話框的訊息。
提供額外的屬性頁
使用函式來建立其他頁面。
使用 PRINTDLGEX 結構的 lphPropertyPages 成員來指定其他頁面的句柄的陣列。
在您創建每個頁面時指定的對話框程序會處理傳送至頁面的訊息。
您可能需要提供一個實作該介面的回呼物件。 PrintDlgEx 函式會使用此介面將指標傳遞至應用程式 IPrintDialogServices 介面。 其他屬性頁的對話框程式可以使用這個介面來擷取目前選取印表機的相關信息。
列印屬性表的回調物件
顯示 Print 屬性表的應用程式可以實作回呼物件,以接收來自 PrintDlgEx 函式的通知和訊息,當屬性表顯示時。 若要提供回呼物件,請在 PRINTDLGEX 結構中的 lpCallback 成員中指定物件的指標。
回呼對象必須實作 IPrintDialogCallback 介面。 PrintDlgEx 函式會在下列情況下呼叫 IPrintDialogCallback 方法:
- 當對話框已初始化時
- 當使用者從屬性表顯示的已安裝印表機清單中選取不同的印表機時
- 當它在屬性表「一般」頁面的下半部收到子對話方塊的訊息時
回呼物件也應該實作 IObjectWithSite 介面。 PrintDlgEx 函式會呼叫一個方法,將指標傳遞至應用程式中的 IPrintDialogServices 介面。 IPrintDialogCallback 方法可以使用 IPrintDialogServices 介面來擷取目前選取印表機的相關信息。 IPrintDialogServices 介面對於那些會在 Print 屬性表的 通用 頁面之後建立額外頁面的應用程式也很有用。 其他頁面的對話框程式可以呼叫 IPrintDialogServices 方法。