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 頁面設定對話框之後,使用者所做的任何變更都不會由架構儲存。 應用程式本身可以儲存此對話框的任何值到永久位置,例如應用程式的檔或應用程式類別的成員。
繼承階層架構
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
回 系統預設印表機未顯示對話框而初始化的DEVMODE 和 DEVNAMES 結構。 假設 和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
從 DEVMODE 和 DEVNAMES 結構建立印表機裝置內容。
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 呼叫中的 值lpszDriverName
。GetDriverName
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
包含繪圖區域座標的 CRect 或 RECT 物件的指標。
傳回值
如果已處理,則為非零值;否則為 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,架構會繪製整個預設映像。