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“页面设置”对话框关闭后,框架将不会保存用户所做的任何更改。 由应用程序自己决定是否将此对话框中的值保存到永久位置,例如应用程序的文档或应用程序类的成员。
继承层次结构
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
返回为系统默认打印机初始化的 DEVMODE 和 DEVNAMES 结构,而无需显示对话框。 假设hDevNames
和hDevMode
均为 NULL;否则,函数将返回错误。 如果旧打印机驱动程序(Windows 版本 3.0 之前的版本)支持系统默认打印机,则仅返回hDevNames
;hDevMode
为 NULL。PSD_DISABLEPAPER 禁用纸张选择控件。
PSD_SHOWHELP 使对话框显示“帮助”按钮。 如果指定了此标志,
hwndOwner
成员则不得为 NULL。PSD_ENABLEPAGESETUPHOOK 启用在
lpfnSetupHook
中指定的挂钩函数。PSD_ENABLEPAGESETUPTEMPLATE 使操作系统通过使用由
hInstance
和lpSetupTemplateName
标识的对话框模板框来创建对话框。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::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
指向包含绘图区域坐标的 CRect 或 RECT 对象的指针。
返回值
如果已处理,则返回非零值;否则为 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,则整个默认图像由框架绘制。