CPageSetupDialog 类

封装由 Windows 公共 OLE“页面设置”对话框提供的服务以及对于设置和修改打印边距的额外支持。

语法

class CPageSetupDialog : public CCommonDialog

成员

公共构造函数

名称 描述
CPageSetupDialog::CPageSetupDialog 构造 CPageSetupDialog 对象。

公共方法

名称 描述
CPageSetupDialog::CreatePrinterDC 创建用于打印的设备上下文。
CPageSetupDialog::DoModal 显示对话框并允许用户进行选择。
CPageSetupDialog::GetDeviceName 返回打印机的设备名称。
CPageSetupDialog::GetDevMode 返回打印机的当前 DEVMODE。
CPageSetupDialog::GetDriverName 返回打印机使用的驱动程序。
CPageSetupDialog::GetMargins 返回打印机的当前边距设置。
CPageSetupDialog::GetPaperSize 返回打印机的纸张大小。
CPageSetupDialog::GetPortName 返回输出端口名称。
CPageSetupDialog::OnDrawPage 由框架调用以呈现打印的页面的屏幕图像。
CPageSetupDialog::PreDrawPage 在呈现打印的页面的屏幕图像之前由框架调用。

公共数据成员

“属性” 描述
CPageSetupDialog::m_psd 用于自定义 CPageSetupDialog 对象的结构。

备注

此类旨在取代“打印设置”对话框。

若要使用 CPageSetupDialog 对象,请先使用 CPageSetupDialog 构造函数创建该对象。 在构造完对话框后,可以设置或修改 m_psd 数据成员中的任何值来初始化对话框的控件的值。 m_psd 结构的类型为 PAGESETUPDLG。

初始化对话框控件后,调用 DoModal 成员函数以显示对话框,并允许用户选择打印选项。 DoModal 返回用户选择了“确定”(IDOK) 还是“取消”(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
可用于自定义对话框设置的一个或多个标志。 可以使用按位“或”运算符来组合值。 这些值将具有以下含义:

  • PSD_DEFAULTMINMARGINS 将页边距的最小允许宽度设置为与打印机的最小值相同。 如果还指定了 PSD_MARGINS 和 PSD_MINMARGINS 标志,则会忽略此标志。

  • PSD_INWININIINTLMEASURE 未实现。

  • PSD_MINMARGINS 使系统使用 rtMinMargin 成员中指定的值作为左、上、右和下边距的最小允许宽度。 系统会阻止用户输入小于指定最小值的宽度。 如果未指定 PSD_MINMARGINS,系统会将最小允许宽度设置为打印机所允许的最小宽度。

  • PSD_MARGINS 激活边距控制区域。

  • PSD_INTHOUSANDTHSOFINCHES 采用 1/1000 英寸测量对话框的单位。

  • PSD_INTHOUSANDTHSOFINCHES 采用 1/100 毫米测量对话框的单位。

  • PSD_DISABLEMARGINS 禁用边距对话框控件。

  • PSD_DISABLEPRINTER 禁用打印机按钮。

  • PSD_NOWARNING 阻止在没有默认打印机时显示警告消息。

  • PSD_DISABLEORIENTATION 禁用页面方向对话框控件。

  • PSD_RETURNDEFAULT 使 CPageSetupDialog 返回为系统默认打印机初始化的 DEVMODEDEVNAMES 结构,而无需显示对话框。 假设 hDevNameshDevMode 均为 NULL;否则,函数将返回错误。 如果旧打印机驱动程序(Windows 版本 3.0 之前的版本)支持系统默认打印机,则仅返回 hDevNameshDevMode 为 NULL。

  • PSD_DISABLEPAPER 禁用纸张选择控件。

  • PSD_SHOWHELP 使对话框显示“帮助”按钮。 如果指定了此标志,hwndOwner 成员则不得为 NULL。

  • PSD_ENABLEPAGESETUPHOOK 启用在 lpfnSetupHook 中指定的挂钩函数。

  • PSD_ENABLEPAGESETUPTEMPLATE 使操作系统通过使用由 hInstancelpSetupTemplateName 标识的对话框模板框来创建对话框。

  • 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::DoModal

调用此函数以显示 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 GlobalUnlock 函数解锁此结构占用的内存,Windows SDK 中对该函数进行了介绍。

CPageSetupDialog::GetDriverName

在调用 DoModal 后调用此函数以检索系统定义的打印机设备驱动程序的名称。

CString GetDriverName() const;

返回值

指定系统定义的驱动程序名称的 CString

注解

将指向由 GetDriverName 返回的 CString 对象的指针用作 CDC::CreateDC 调用中 lpszDriverName 的值。

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 对象后,可以在调用 DoModal 成员函数之前使用 m_psd 来设置对话框的各个方面。

如果直接修改 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“页面设置”对话框的一部分。 默认实现将绘制文本页面的图像。

替代此函数以自定义图像的特定区域或整个图像的绘制。 可以通过将 switch 语句与 case 语句结合使用来检查 nMessage 的值以执行此操作。 例如,若要自定义页面图像内容的呈现,可以使用以下示例代码:

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

请注意,无需处理 nMessage 的每个案例。 可以选择处理图像的一个组件、图像的多个组件或整个区域。

CPageSetupDialog::PreDrawPage

在绘制打印的页面的屏幕图像之前由框架调用。

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

参数

wPaper
指定一个值,该值指示纸张大小。 此值可以是 DEVMODE 结构的描述中列出的 DMPAPER_ 值之一

wFlags
指示纸张或信封的方向,以及打印机是点矩阵还是 HPPCL(Hewlett Packard 打印机控制语言)设备。 此参数可以具有下列值之一:

  • 0x001 横向模式下的纸张(点矩阵)

  • 0x003 横向模式下的纸张 (HPPCL)

  • 0x005 纵向模式下的纸张(点矩阵)

  • 0x007 纵向模式下的纸张 (HPPCL)

  • 0x00b 横向模式下的信封 (HPPCL)

  • 0x00d 纵向模式下的信封(点矩阵)

  • 0x019 横向模式下的信封(点矩阵)

  • 0x01f 纵向模式下的信封(点矩阵)

pPSD
指向 PAGESETUPDLG 结构的指针。 有关 PAGESETUPDLG 的详细信息,请参阅 Windows SDK。

返回值

如果已处理,则返回非零值;否则为 0。

备注

替代此函数以自定义图像的绘制。 如果替代此函数并返回 TRUE,则必须绘制整个图像。 如果替代此函数并返回 FALSE,则整个默认图像由框架绘制。

另请参阅

MFC 示例 WORDPAD
CCommonDialog 类
层次结构图