CPageSetupDia log
CPageSetupDialog 类 封 装 了 W indows 通 用 OLE Page SetUp 对 话 框 提 供 的 服 务 , 并 且 还 添 加 了 对 设 置 和 修 改 打 印 页 边 距 的 支 持 。这 个 类 是 设 计 来 代 替 Print Setup
对 话 框 的 。
要 使 用 一 个 CPageSetupDialog 对 象 , 首 先 用 CPageSetupDialog 构 造 函 数 创 建 对象 。 一 旦 已 经 构 造 了 对 话 框 , 就 可 以 设 置 或 修 改 数 据 成 员 m_psd 的 任 意 值 来 初始 化 对 话 框 的 控 件 。 m_psd 结 构 是 PAGESETUPDLG 类 型 。 W in32 SDK 文 档 中的 “ 设 置 打 印 页 ” 主 题 中 给 出 了 初 始 化 这 个 结 构 的 例 子 。
在 初 始 化 对 话 框 控 件 之 后 , 调 用 DoModal 成 员 函 数 来 显 示 对 话 框 , 并 允 许 用 户选 择 打 印 选 项 。 DoModal 返 回 值 说 明 了 用 户 是 选 择 了 O K ( IDOK ) 还 是 选 择 了Cancel( IDCANCEL ) 按 钮 。
如 果 DoModal 返 回 的 是 IDOK ,你 就 可 以 用 几 个 CPageSetupDialog 的 成 员 函 数 , 或 访 问 m_psd 数 据 成 员 来 获 取 用 户 输 入 的 信 息 。
注 意 在 通 用 的 OLE Page Setup 对 话 框 被 取 消 后 , 用 户 作 出 的 任 何 改 变
都 不 会 被 框 架 保 存 。 应 用 程 序 必 须 自 己 负 责 来 将 对 话 框 中 的 所 有 值 保 存到 一 个 永 久 的 地 方 , 比 如 应 用 程 序 文 档 或 应 用 程 序 类 的 成 员 。
#include <afxdlgs.h>
CPageSetupDialog 类 成 员
Attributes
CreatePrinterDC 为 打 印 创 建 一 个 设 备 环 境
GetDeviceName 返 回 打 印 机 的 设 备 名 称
GetDevMode 返 回 打 印 机 的 当 前 DEVMODE
GetDiverName 返 回 打 印 机 使 用 的 驱 动 程 序
GetMargins 返 回 打 印 机 当 前 的 页 边 距 设 置
GetPortName 返 回 输 出 端 口 名
GetPaperSize 返 回 打 印 机 的 纸 张 大 小
Construction
CPageSetupDialog 构 造 一 个 CPageSetupDialog 对 象
Data Members
m_psd 一 个 用 来 定 制 CPageSetupDialog 对 象 的 结 构
Operation s DoModal 显 示 对 话 框 并 让 用 户 做 一 次 选 择
Overridables
OnDrawPage 框 架 调 用 来 给 出 一 个 打 印 页 的 屏 幕 图 像 。
PreDrawPage 在 给 出 一 个 打 印 页 的 屏 幕 图 像 之 前 由 框 架 调 用
成 员 函 数
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_INTHUNDREDTHSOFMILLIMETERS 使 对 话 框 的 单 元 按 1/100
毫 米 来 测 量 。
-
PSD _ D ISABLEMARGINS 使 边 距 对 话 框 控 件 无 效 。
-
PSD _ D ISABLEPRINTER 使 Printer 按 钮 无 效 。
-
PSD _ NOWARNING 当 没 有 缺 省 的 打 印 机 时 , 禁 止 显 示 警 告
消 息 。
-
PSD _ D ISABLEORIENTATION 使 页 面 方 向 控 件 无 效 。
-
PSD _ RETURNDEFAULT 不 显 示 对 话 框 就 使 CPageSetupDialog 返
回DEVMODE 和 DEVNAMES 结 构 , 这 两 个 结 构 是 为 系 统 缺 省 的 打 印 机而 初 始 化 的 。 它 假 设 hDevNames 和 hDevMode 都 是 NULL ; 否 则 , 函
数 就 返 回 一 个 错 误 。 如 果 系 统 的 缺 省 打 印 机 是 由 一 个 老 的 打 印 机 驱 动程 序( 早 于 W indows 3.0 版 本 )驱 动 的 ,则 只 返 回 hDevNames ;hDevMode 是 NULL 。
-
PSD _ D ISABLEPAPER 使 页 面 选 择 控 件 无 效 。
-
PSD _ SHOWHELP 使 对 话 框 显 示 Help 按 钮 。 如 果 这 个 标 志 被
指 定 , 则 hwndOwner 成 员 必 须 是 NULL 。
-
PSD _ ENABLEPAGESETUPHOOK 使 hook 函 数 在 lpfnSetupHook 中被 指 定
。
-
PSD _ ENABLEPAGESETUPTEMPLATE 使 操 作 系 统 用 由 hInstance 和
lpSetupTem- plateName 标 识 的 对 话 框 模 板 来 创 建 对 话 框 。
- PSD _ ENABLEPAGESETUPTEMPLATEHANDLE 表 明 hInstance 标 识一 个 包
含 预 先 载 入 的 对 话 框 模 板 的 数 据 块 。 如 果 此 标 志 被 指 定 , 则 系
统 忽 略 lpSetupTemplate- Nam e。
-
PSD _ ENABLEPAGEPAINTHOOK 使 在 lpfnPagePaintHook 中 指 定 的钩 子
函 数 有 效 。
-
PSD _ D ISABLEPAGEPAINTING 使 对 话 框 的 绘 画 区 无 效 。
pParentWnd
指 向 对 话 框 的 父 或 属 主 的 指 针 。
说 明
此 函 数 用 来 构 造 一 个 CPageSetupDialog 对 象 。 使 用 DoModal 函 数 来 显 示 此 对话 框 。
请 参 阅 CPrintDialog , CPageSetupDialog
CPageSetupDialog::CreatePrinterDC
HDC CreatePrinterDC();
返 回 值
返 回 新 创 建 的 打 印 机 设 备 环 境 ( DC ) 的 句 柄 。
说 明
从 DEVMODE 和 DEVNAMES 结 构 创 建 一 个 打 印 机 设 备 环 境 。
请 参 阅 CPageSetupDialog::GetDevMode , CPageSetupDialog::GetDeviceNam e, CPageSetupDialog::GetD riverName
CPageSetupDialog::DoModal
virtual int DoModal();
返 回 值
返 回 IDOK 或 IDCANCEL 。 如 果 返 回 的 是 IDCANCEL , 则 调 用 W indows CommDlgExtended - Error 函 数 来 确 定 是 否 发 生 了 一 个 错 误 。
ID O K 和 IDCANCEL 都 是 常 量 ,它 们 用 来 表 明 用 户 选 择 的 是 O K 按 钮 还 是 Cancel
按 钮 。
说 明
此 函 数 用 来 显 示 W indows 通 用 OLE Page Setup 对 话 框 , 并 允 许 用 户 选 择 不 同的 打 印 设 置 选 项 , 比 如 打 印 边 距 、 页 面 大 小 、 页 面 方 向 , 和 打 印 机 目 标 。 另 外 , 用 户 页 可 以 访 问 如 网 络 位 置 和 所 选 打 印 机 的 属 性 等 打 印 机 设 置 选 项 。
如 果 你 希 望 通 过 设 置 m_psd 结 构 的 成 员 来 初 始 化 不 同 的 Page Setup 对 话 框 选
项 , 你 必 须 在 调 用 DoModal 之 前 和 构 造 此 对 话 框 之 后 进 行 。 在 调 用 DoModal
之 后 , 调 用 其 它 的 成 员 函 数 来 获 取 用 户 在 对 话 框 中 输 入 的 设 置 和 信 息 。
如 果 你 想 传 送 用 户 输 入 的 当 前 设 置 , 请 调 用 C W inApp::SelectPrinte r。 这 个 函 数读 取 来 自 CPageSetupDialog 对 象 的 信 息 并 初 始 化 和 选 择 一 个 具 有 适 当 属 性 的 新打 印 机 DC 。
AfxGetApp() – >SelectPrinter(dlg.m_psd.hDevNames, dlg.m_psd.hDevMode );
请 参 阅 CPageSetupDialog::m_psd
CPageSetupDialog::GetDeviceName
CString GetDeviceName() const;
返 回 值
由 CPageSetupDialog 对 象 使 用 的 设 备 名 称 。
说 明
在 DoModal 之 后 调 用 此 函 数 来 获 取 当 前 选 择 的 打 印 机 名 称 。
CPageSetupDialog::GetDevMode LPDEVMODE GetDevMode() const; 返 回 值
返 回 DEVMODE 数 据 结 构 , 该 结 构 包 含 了 有 关 设 备 初 始 化 和 打 印 机 驱 动 程 序环 境 的 信 息 。 你 必 须 用 W indows GlobalUnlock 函 数 解 锁 这 个 结 构 所 占 的 内 存 , 这 在 “ Platform SDK ” 中 有 描 述 。
说 明
在 DoModal 之 后 调 用 此 函 数 来 获 取 有 关 CPageSetupDialog 对 象 的 打 印 机 设 备
环 境 的 信 息 。CPageSetupDialog::GetDriverName CString GetDriverNam e()Cons t;
返 回 值
返 回 当 前 选 择 的 打 印 机 设 备 驱 动 程 序 的 名 称 。
说 明
在 DoModal 之 后 调 用 此 函 数 来 获 取 当 前 选 择 的 打 印 机 设 备 驱 动 程 序 的 名 称 。
请 参 阅 CPageSetupDialog::GetDeviceNam e, CPageSetupDialog::GetDevMode, CPageSetupDialog::GetPortName
CPageSetupDialog::GetMargins
void GetMargins( LPRECT lpRectMargins , LPRECT lpRectMinMargins ) cons t;
参 数
lpRectMargins
指 向 RECT 结 构 或 CRect 结 构 的 指 针 , 这 两 个 结 构 描 述 ( 用 1/1000 英 寸或 1/100 毫 米 ) 了 当 前 选 择 的 打 印 机 的 打 印 边 距 。 如 果 对 这 个 矩 形 并 不感 兴 趣 , 可 以 将 此 参 数 设 置 为 NULL 。
lpRectMinMargins
指 向 RECT 结 构 或 CRect 结 构 的 指 针 , 这 两 个 结 构 描 述 ( 用 1/1000 英 寸或 1/100 毫 米 ) 了 当 前 选 择 的 打 印 机 的 最 小 打 印 边 距 。 如 果 对 这 个 矩 形并 不 感 兴 趣 , 可 以 将 此 参 数 设 置 为 NUL L 。
说 明
在 DoModal 之 后 调 用 这 个 函 数 来 获 取 打 印 机 设 备 驱 动 程 序 的 边 距 。
CPageSetupDialog::GetPaperSize
CSize GetPaperSize() cons t;
返 回 值
- 个 包 含 打 印 纸 张 尺 寸 ( 以 1/1000 英 寸 或 1/100 毫 米 为 单
位 ) 的 CSize 对 象 。
说 明
此 函 数 用 来 获 取 打 印 纸 张 的 尺 寸 。
CPageSetupDialog::GetPortName
CString GetPortName() const;
返 回 值
返 回 当 前 所 选 打 印 端 口 的 名 称 。
说 明
在 DoModal 之 后 调 用 此 函 数 来 获 取 当 前 所 选 打 印 端 口 的 名 称 。
请 参 阅 CPageSetupDialog ::GetDeviceNam e, CPageSetupDialog ::GetDriverName
CPageSetupDialog::OnDrawPage
virtual UINT OnDrawPage( CDC* pDC , U INT nMessage , LPRECT lpRect );
返 回 值
如 果 被 处 理 则 返 回 非 零 值 ; 否 则 返 回 0 。
参 数
pDC
指 向 打 印 机 设 备 环 境 的 指 针 。
nMessage
指 明 一 个 消 息 , 表 示 当 前 绘 画 页 面 的 区 域 。 可 以 是 下 列 值 之 一 :
-
WM_PSD_FULLPAGERECT 整 个 页 面 区 。
-
WM_PSD_MINMARGINRECT 当 前 最 小 边 距 。
-
WM_PSD_MARGINRECT 当 前 边 距 。
-
WM_PSD_GREEKTEXTRECT 页 面 的 内 容 。
-
WM_PSD_ENVSTAMPRECT 为 贴 邮 票 而 保 留 的 区 域 。
-
WM_PSD_YAFULLPAGERECT 用 于 返 回 地 址 的 区 域 。 这 个 区 域
延伸 到 示 例 页 区 域 的 边 界 。
lpRect
指 向 一 个 CRect 或 RECT 对 象 的 指 针 , 这 两 个 对 象 包 含 了 绘 画 区 的 坐 标 。
说 明
由 框 架 调 用 来 画 一 个 打 印 页 面 的 屏 幕 图 像 。 然 后 这 个 图 像 作 为 通 用 OLE Page Setup 对 话 框 的 一 部 分 来 显 示 。 函 数 的 缺 省 实 现 是 画 一 个 文 本 页 的 图 像 。
重 载 这 个 函 数 可 以 定 制 是 画 图 像 的 指 定 区 域 , 还 是 画 整 个 图 像 。 你 可 以 使 用
switch 和 case 语 句 来 检 查 nMessage 的 值 。 例 如 , 为 了 定 制 获 取 表 示 图 像 的 内容 , 你 可 以 使 用 下 面 的 例 子 代 码 :
Switch( nType )
{
case WM_PSD_GREEKTEXTRECT:
DrawMyImage( pDC, lpRect); //画 我 的 指 定 图 像 。
return 1; default:
return ::Draw(CDC* pDC, UINT nDrawType, LPRECT lpRect);
} ;
注 意 : 你 不 需 要 处 理 nMessage 的 每 一 个 取 值 。 可 以 选 择 处 理 图 像 的 某 一部 分 , 某 几 个 部 分 或 整 个 区 域 。
请 参 阅 CPageSetupDialog::PreDrawPage
CPageSetupDialog::PreDrawPage
virtual UINT PreDrawPage( W O R D wPape r , W O R D wFlags ,LPPAGESETUPDLG
pPSD );
返 回 值
如 果 被 处 理 则 返 回 非 零 值 ; 否 则 返 回 0 。
参 数
wPaper
指 定 一 个 用 来 表 明 纸 张 尺 寸 的 值 。 这 个 值 可 以 是 一 个 DMPAPER_ 值 , 在
DEVMODE 结 构 的 描 述 中 有 这 些 值 的 列 表 。
wFlags
表 明 纸 张 或 信 封 的 方 向 ,以 及 表 明 打 印 机 是 点 阵 式 的 还 是 HPPC L( Hewlett Packard Printer Control Language ) 设 备 。 此 参 数 可 以 是 下 列 值 之 一 :
-
0x001 纸 张 是 横 向 放 置 ( 点 阵 式 ) 。
-
0x003 纸 张 是 横 向 放 置 ( HPPC L )。
-
0x005 纸 张 是 纵 向 放 置 ( 点 阵 式 ) 。
-
0x007 纸 张 是 纵 向 放 置 ( HPPC L )。
-
0x00b 信 封 是 横 向 放 置 ( HPPC L )。
-
0x00d 信 封 是 纵 向 放 置 ( 点 阵 式 ) 。
-
0x019 信 封 是 横 向 放 置 ( HPPC L )。
-
0x01f 信 封 是 纵 向 放 置 ( 点 阵 式 ) 。
pPSD
指 向 一 个 PAGESETUPDLG 结 构 的 纸 张 。 要 获 取 有 关 这 个 结 构 的 更 多 消息 , 请 参 见 W in32 文 档 。
说 明
在 画 用 于 页 面 的 屏 幕 图 像 之 前 由 框 架 调 用 。 重 载 这 个 函 数 来 定 制 图 像 的 绘 画 。如 果 你 重 载 这 个 函 数 并 返 回 TRUE , 则 你 必 须 画 整 个 图 像 。 如 果 你 重 载 这 个 函
请 参 阅 CPageSetupDialog::OnDrawPage
数 据 成 员
CPageSetupDialog::m_psd
说 明
一 个 PAGESETUPDLG 类 型 的 结 构 , 它 的 成 员 保 存 了 对 话 框 对 象 的 特 征 。 在 构造 了 一 个 CPageSetupDialog 对 象 之 后 ,在 调 用 DoModal 之 前 ,你 可 以 使 用 m_psd 来 设 置 对 话 框 的 不 同 方 面 。
如 果 你 直 接 修 改 m_psd 数 据 成 员 , 则 你 将 重 载 任 何 缺 省 的 行 为 。