共用方式為


CPageSetupDialog 類別

封裝 Windows 通用 OLE 版面設定對話方塊所提供的服務,以及設定和修改列印邊界的額外支援。

語法

class CPageSetupDialog : public CCommonDialog

成員

公用建構函式

名稱 描述
CPageSetupDialog::CPageSetupDialog 建構 CPageSetupDialog 物件。

公用方法

名稱 描述
CPageSetupDialog::CreatePrinterDC 建立用於列印的裝置內容。
CPageSetupDialog::D oModal 顯示對話框,並允許用戶進行選取。
CPageSetupDialog::GetDeviceName 傳回印表機的裝置名稱。
CPageSetupDialog::GetDevMode 傳回印表機目前的 DEVMODE。
CPageSetupDialog::GetDriverName 傳回印表機所使用的驅動程式。
CPageSetupDialog::GetMargins 傳回印表機目前的邊界設定。
CPageSetupDialog::GetPaperSize 傳回印表機的紙張大小。
CPageSetupDialog::GetPortName 傳回輸出埠名稱。
CPageSetupDialog::OnDrawPage 由架構呼叫,以轉譯列印頁面的螢幕影像。
CPageSetupDialog::P reDrawPage 由架構呼叫,再轉譯列印頁面的螢幕影像。

公用資料成員

名稱 描述
CPageSetupDialog::m_psd 用來自定義 CPageSetupDialog 對象的結構。

備註

此類別的設計目的是要取代 [列印安裝] 對話框。

若要使用 CPageSetupDialog 物件,請先使用 建 CPageSetupDialog 構函式建立 物件。 建構對話框之後,您可以設定或修改數據成員中的任何 m_psd 值,以初始化對話框控件的值。 m_psd 結構的類型為PAGESETUPDLG。

初始化對話框控件之後,請呼叫 DoModal 成員函式以顯示對話框,並允許用戶選取列印選項。 DoModal 會傳回使用者選取 [確定] 或 [取消] 或 [IDCANCEL] 按鈕。

如果 DoModal 傳回 IDOK,您可以使用數個 CPageSetupDialog的成員函式或存取 m_psd 數據成員,來擷取使用者輸入的資訊。

注意

關閉一般 OLE 頁面設定對話框之後,使用者所做的任何變更都不會由架構儲存。 應用程式本身可以儲存此對話框的任何值到永久位置,例如應用程式的檔或應用程式類別的成員。

繼承階層架構

CObject

CCmdTarget

CWnd

CDialog

CCommonDialog

CPageSetupDialog

需求

標頭: afxdlgs.h

CPageSetupDialog::CPageSetupDialog

呼叫此函式以建構 CPageSetupDialog 物件。

CPageSetupDialog(
    DWORD dwFlags = PSD_MARGINS | PSD_INWININIINTLMEASURE,
    CWnd* pParentWnd = NULL);

參數

dwFlags
您可以使用一或多個旗標來自定義對話框的設定。 這些值可以使用位 OR 運算符來結合。 這些值具有以下意義:

  • PSD_DEFAULTMINMARGINS設定頁面邊界的最小允許寬度,與印表機的最小值相同。 如果同時指定PSD_MARGINS和PSD_MINMARGINS旗標,則會忽略此旗標。

  • PSD_INWININIINTLMEASURE 未實作。

  • PSD_MINMARGINS 導致系統使用成員中指定的 rtMinMargin 值,做為左、上、右和下邊界的最小允許寬度。 系統可防止使用者輸入小於指定最小值的寬度。 如果未指定PSD_MINMARGINS,系統會將印表機允許的寬度下限設定為允許的寬度。

  • PSD_MARGINS啟用邊界控制區域。

  • PSD_INTHOUSANDTHSOFINCHES 使對話框的單位以 1/1000 英吋為單位來測量。

  • PSD_INHUNDREDTHSOFMILLIMETERS 導致對話框的單位以 1/100 公厘為單位來測量。

  • PSD_DISABLEMARGINS停用邊界對話框控制件。

  • PSD_DISABLEPRINTER停用 [印表機] 按鈕。

  • PSD_NOWARNING 當沒有預設印表機時,防止顯示警告訊息。

  • PSD_DISABLEORIENTATION停用頁面方向對話框控制件。

  • PSD_RETURNDEFAULT 導致傳 CPageSetupDialog系統預設印表機未顯示對話框而初始化的DEVMODEDEVNAMES 結構。 假設 和 hDevMode 都是 hDevNames NULL,否則函式會傳回錯誤。 如果舊印表機驅動程式支援系統預設印表機(早於 Windows 3.0 版),則只會 hDevNames 傳回 ; hDevMode 為 NULL。

  • PSD_DISABLEPAPER停用紙張選取控件。

  • PSD_SHOWHELP [導致] 對話框顯示 [說明] 按鈕。 如果指定此旗標,成員 hwndOwner 不得為 NULL。

  • PSD_ENABLEPAGESETUPHOOK 啟用 中指定的 lpfnSetupHook攔截函式。

  • PSD_ENABLEPAGESETUPTEMPLATE 讓作業系統使用 和lpSetupTemplateName所識別的hInstance對話框範本來建立對話方塊。

  • PSD_ENABLEPAGESETUPTEMPLATEHANDLE 指出 hInstance 識別包含預先載入對話框範本的數據區塊。 如果指定這個旗標,系統會忽略 lpSetupTemplateName 此旗標。

  • PSD_ENABLEPAGEPAINTHOOK 啟用 中指定的 lpfnPagePaintHook攔截函式。

  • PSD_DISABLEPAGEPAINTING停用對話框的繪製區域。

pParentWnd
對話框的父代或擁有者指標。

備註

使用 DoModal 函式來顯示對話方塊。

範例

void CMyRichEditView::OnPageSetupDlg()
{
   CPageSetupDialog psd(PSD_INTHOUSANDTHSOFINCHES | PSD_MARGINS |
      PSD_ENABLEPAGEPAINTHOOK, this);

   // Initialize margins
   psd.m_psd.rtMargin.top = 1000;
   psd.m_psd.rtMargin.left = 1250;
   psd.m_psd.rtMargin.right = 1250;
   psd.m_psd.rtMargin.bottom = 1000;
   psd.m_psd.lpfnPagePaintHook = (LPPAGEPAINTHOOK)PaintHook;

   if (IDOK == psd.DoModal())
   {
      // Propagate changes to the app
      AfxGetApp()->SelectPrinter(psd.m_psd.hDevNames, psd.m_psd.hDevMode);
   }
   else
   {
      TRACE(_T("CommDlgExtendedError returned error %d from ")
         _T("CPageSetupDialog::DoModal().\n"),
         (int)CommDlgExtendedError());
   }
}

CPageSetupDialog::CreatePrinterDC

DEVMODEDEVNAMES 結構建立印表機裝置內容。

HDC CreatePrinterDC();

傳回值

處理新建立的印表機裝置內容 (DC)。

CPageSetupDialog::D oModal

呼叫此函式以顯示 [Windows 通用 OLE 頁面設定] 對話方塊,並允許使用者選取各種列印安裝選項,例如紙張的列印邊界、大小和方向,以及目的地印表機。

virtual INT_PTR DoModal();

傳回值

IDOK 或 IDCANCEL。 如果傳回 IDCANCEL,請呼叫 Windows CommDlgExtendedError 函式來判斷是否發生錯誤。

IDOK 和 IDCANCEL 是常數,指出使用者是否選取 [確定] 或 [取消] 按鈕。

備註

此外,使用者可以存取印表機安裝選項,例如所選取印表機的特定網路位置和屬性。

如果您想要藉由設定 結構的成員 m_psd 來初始化各種頁面設定對話框選項,您應該在呼叫 DoModal之前,以及在建構對話對象之後執行此動作。 呼叫 DoModal之後,呼叫其他成員函式,以將用戶的設定或資訊輸入擷取到對話框中。

如果您想要傳播使用者輸入的目前設定,請呼叫 CWinApp::SelectPrinter。 此函式會從 CPageSetupDialog 物件取得資訊,並初始化並選取具有適當屬性的新印表機 DC。

AfxGetApp()->SelectPrinter(psd.m_psd.hDevNames, psd.m_psd.hDevMode);

範例

請參閱 CPageSetupDialog::CPageSetupDialog 的範例

CPageSetupDialog::GetDeviceName

在之後 DoModal 呼叫此函式,以擷取目前選取的印表機名稱。

CString GetDeviceName() const;

傳回值

物件所使用的 CPageSetupDialog 裝置名稱。

CPageSetupDialog::GetDevMode

呼叫 之後呼叫 DoModal 此函式,以擷取物件印表機裝置內容 CPageSetupDialog 的相關信息。

LPDEVMODE GetDevMode() const;

傳回值

DEVMODE 數據結構,其中包含列印驅動程式之裝置初始化和環境的相關信息。 您必須使用 Windows SDK 中所述的 Windows GlobalUnlock 函式來解除鎖定這個結構所取得的記憶體。

CPageSetupDialog::GetDriverName

呼叫 DoModal 之後呼叫此函式,以擷取系統定義的印表機設備驅動器名稱。

CString GetDriverName() const;

傳回值

CString,指定系統定義的驅動程式名稱。

備註

使用 所傳回之 物件的指標CString做為 CDC::CreateDC 呼叫中的 值lpszDriverNameGetDriverName

CPageSetupDialog::GetMargins

呼叫 之後呼叫 DoModal 此函式,以擷取印表機設備驅動器的邊界。

void GetMargins(
    LPRECT lpRectMargins,
    LPRECT lpRectMinMargins) const;

參數

lpRectMargins
RECT 結構或 CRect 物件的指標,該物件描述目前所選印表機的印表邊界(以 1/1000 英吋或 1/100 公厘為單位)。 如果您對這個矩形不感興趣,請傳遞此參數的NULL。

lpRectMinMargins
RECT結構或CRect物件的指標,描述目前所選印表機的最小印邊界(以1/1000英吋或1/100公厘為單位)。 如果您對這個矩形不感興趣,請傳遞此參數的NULL。

CPageSetupDialog::GetPaperSize

呼叫此函式以擷取選取列印的紙張大小。

CSize GetPaperSize() const;

傳回值

CSize 物件,其中包含選取列印的紙張大小(以 1/1000 英吋或 1/100 公厘為單位)。

CPageSetupDialog::GetPortName

呼叫 DoModal 之後呼叫此函式,以擷取目前選取的印表機埠名稱。

CString GetPortName() const;

傳回值

目前選取之印表機埠的名稱。

CPageSetupDialog::m_psd

PAGESETUPDLG 類型的結構,其成員會儲存對話物件的特性。

PAGESETUPDLG m_psd;

備註

CPageSetupDialog 構 物件之後,您可以使用 m_psd 來設定對話框的各個層面,再呼叫 DoModal 成員函式。

如果您直接修改 m_psd 數據成員,則會覆寫任何默認行為。

如需PAGESETUPDLG結構的詳細資訊,請參閱Windows SDK。

請參閱 CPageSetupDialog::CPageSetupDialog 的範例

CPageSetupDialog::OnDrawPage

由架構呼叫以繪製列印頁面的螢幕影像。

virtual UINT OnDrawPage(
    CDC* pDC,
    UINT nMessage,
    LPRECT lpRect);

參數

pDC
印表機裝置內容的指標。

nMessage
指定訊息,指出目前正在繪製的頁面區域。 可以是下列其中一項:

  • WM_PSD_FULLPAGERECT整個頁面區域。

  • WM_PSD_MINMARGINRECT目前的最小邊界。

  • WM_PSD_MARGINRECT目前邊界。

  • WM_PSD_GREEKTEXTRECT頁面的內容。

  • WM_PSD_ENVSTAMPRECT保留給郵票表示法的區域。

  • WM_PSD_YAFULLPAGERECT傳回位址表示法的區域。 此區域延伸至範例頁面區域的邊緣。

lpRect
包含繪圖區域座標的 CRectRECT 物件的指標。

傳回值

如果已處理,則為非零值;否則為 0。

備註

然後,此影像會顯示為 [通用 OLE 頁面設定] 對話框的一部分。 默認實作會繪製文字頁面的影像。

覆寫此函式以自定義影像的特定區域或整個影像的繪圖。 您可以使用語句搭配case檢查 nMessage 值的 語句來執行此switch動作。 例如,若要自定義頁面影像內容的轉譯,您可以使用下列範例程序代碼:

switch (nMessage)
{
case WM_PSD_GREEKTEXTRECT:
   DrawMyImage(pDC, lpRect);    //draws my special graphic
   return 1;
default:
   return CPageSetupDialog::OnDrawPage(pDC, nMessage, lpRect);
}

請注意,您不需要處理 nMessage 的每個案例。 您可以選擇處理映像的一個元件、映像的數位元件或整個區域。

CPageSetupDialog::P reDrawPage

在繪製列印頁面的螢幕影像之前,由架構呼叫。

virtual UINT PreDrawPage(
    WORD wPaper,
    WORD wFlags,
    LPPAGESETUPDLG pPSD);

參數

wPaper
指定值,這個值表示紙張大小。 此值可以是 DEVMODE 結構描述中所列的其中一個DMPAPER_值。

wFlags
指出紙張或信封的方向,以及印表機是否為點矩陣或 HPPCL (Hewlett Packard Printer Control Language) 裝置。 這個參數的值可以是下列其中一個:

  • 以橫向模式0x001紙張 (點矩陣)

  • 以橫向模式0x003紙張 (HPPCL)

  • 以直向模式0x005紙張 (點矩陣)

  • 以直向模式0x007紙 (HPPCL)

  • 以橫向模式0x00b信封 (HPPCL)

  • 以直向模式0x00d信封 (點矩陣)

  • 在橫向模式中0x019信封 (點矩陣)

  • 以直向模式0x01f信封 (點矩陣)

pPSD
PAGESETUPDLG 結構的指標。 如需PAGESETUPDLG的詳細資訊,請參閱 Windows SDK。

傳回值

如果已處理,則為非零值;否則為 0。

備註

覆寫此函式以自定義影像的繪圖。 如果您覆寫此函式並傳回 TRUE,則必須繪製整個影像。 如果您覆寫此函式並傳回 FALSE,架構會繪製整個預設映像。

另請參閱

MFC 範例 WORDPAD
CCommonDialog 類別
階層架構圖表