CPropertyPage

类 CPropertyPage 的 对 象 表 示 一 张 属 性 表 的 各 页 , 或 者 说 是 被 看 作 是 标 签 对 话框 。 同 标 准 对 话 框 一 样 , 要 为 属 性 表 中 每 一 页 从 CPropertyPage 类 中 派 生 一 个新 类 。 要 使 用 CPropertyPage 派 生 对 象 , 首 先 要 创 建 一 个 CPropertySheet 对 象 ,

然 后 为 属 性 表 中 的 每 一 页 创 建 一 个 对 象 。 为 表 中 的 每 一 页 调 用CPropertySheet::AddPage 函 数 , 然 后 对 一 个 模 式 属 性 表 调 用CPropertySheet::DoModal 函 数 来 显 示 此 属 性 表 。 对 一 个 非 模 式 属 性 表 调 用CPropertySheet::Create 来 显 示 此 属 性 表 。

你 可 以 创 建 一 种 被 称 为 向 导 的 标 签 对 话 框 , 这 种 对 话 框 包 括 一 个 属 性 表 , 该 表有 一 系 列 属 性 页 来 引 导 用 户 进 行 一 项 操 作 的 每 一 个 步 骤 , 比 如 说 设 置 一 个 设 备或 创 建 一 个 时 事 通 讯 。 在 一 个 向 导 类 型 的 标 签 对 话 框 中 属 性 页 没 有 标 签 , 每 次只 有 一 个 属 性 页 是 可 见 的 。而 且 ,一 个 向 导 类 型 的 对 话 框 没 有 O K 和 Apply Now 按 钮 , 代 替 它 们 的 是 一 个 Back 按 钮 , 一 个 Next 或 Finish 按 钮 和 一 个 Cancel 按钮 。

如 果 要 获 取 更 多 有 关 建 立 一 个 作 为 向 导 的 属 性 表 的 信 息 , 请 参 见

CPropertySheet::SetWizard- Mode。 要 获 取 更 多 有 关 使 用 CPropertyPage 对 象 的

信 息 , 请 参 见 “ V isual C++ 程 序 员 指 南 ” 中 的 文 章 “ 属 性 表 ” 。

#indlude <afxdlgs.h>

请 参 阅 CPropertyShee t, CDialog , CPropertySheet::SetWizardMode

CPropertyPage 类 成 员

Data M embers

m_psp W indows PROPSHEETPAGE 结 构 。 提 供 对 基 本 属性 页 参 数 的 访 问

Construction

CpropertyPage 构 造 有 关 CPropertyPage 对 象

Construct 构 造 有 关 CPropertyPage 对 象 。 如 果 你 想 指 定 在 运行 时 的 参 数 , 或 者 是 你 使 用 的 是 数 组 , 就 使 用Construct 函 数

Operat ions

CancelToClose 将 O K 按 钮 改 变 为 读 取 Close , 并 在 一 个 模 式 属 性

表 的 页 中 进 行 了 一 次 不 可 恢 复 的 改 变 之 后 , 使

Cancel 按 钮 无 效

SetModified 用 来 激 活 一 个 Apply Now 按 钮 , 或 使 它 成 为 不 活

QuerySiblings 向 前 传 送 消 息 到 属 性 表 的 每 一 页

Overridables

OnCancel 当 单 击 Cancel 按 钮 时 由 框 架 调 用

OnKillActive 当 当 前 页 不 再 是 活 动 页 时 由 框 架 调 用 。 在 此 执 行

数 据 确 认

OnOK 当 OK , Apply Now 或 Close 按 钮 被 单 击 时 由 框 架调 用

OnSetActive 当 某 页 成 为 活 动 页 时 由 框 架 调 用

OnApply 当 Apply Now 按 钮 被 单 击 时 由 框 架 调 用

OnReset 当 Cancel 按 钮 被 单 击 时 由 框 架 调 用

OnQueryCancel 当 Cancel 按 钮 被 单 击 , 并 在 发 生 取 消 操 作 之 前 由

框 架 调 用

续 表

OnWizardBack

在 使 用 一 个 向 导 类 型 的 属 性 表 的 情 况 下 , 当

Back

OnWizardNext

按 钮 被 单 击 时 由 框 架 调 用

在 使 用 一 个 向 导 类 型 的 属 性 表 的 情 况 下 , 当

Next

按 钮 被 单 击 时 由 框 架 调 用

OnWizardFinish 在 使 用 一 个 向 导 类 型 的 属 性 表 的 情 况 下 , 当 Finish

按 钮 被 单 击 时 由 框 架 调 用

成 员 函 数

CPropertyPage::CancelToClose

void CancelToClose();

说 明

在 对 一 个 模 式 属 性 表 的 页 中 的 数 据 进 行 了 不 可 恢 复 的 改 变 之 后 , 调 用 此 函 数 。

此 函 数 将 把 O K 按 钮 改 变 为 Close 按 钮 , 并 使 Cancel 按 钮 无 效 。 这 种 改 变 警 告用 户 , 刚 才 所 作 的 改 变 是 永 久 性 的 , 并 且 这 种 修 改 不 能 被 取 消 。

在 一 个 无 模 式 属 性 表 中 , CancelToClose 成 员 函 数 不 做 任 何 事 情 , 因 为 一 个 无模 式 属 性 表 不 会 有 一 个 缺 省 的 Cancel 按 钮 。

请 参 阅 CPropertyPage ::OnKillActive, CPropertyPage::SetModified

CPropertyPage::Construct

void Construct( UINT nIDTemplate , UINT nIDCaption = 0 );

void Construct( LPCTSTR lpszTemplateNam e, U INT nIDCaption = 0 );

参 数

nIDTemplate

用 于 这 个 页 的 模 板 ID 。

nIDCaption

用 来 放 在 此 页 的 标 签 中 的 名 字 的 ID 。 如 果 是 0 , 则 将 从 对 话 框 模 板 中 取出 用 于 此 页 的 名 字 。

lpszTemplateName

包 含 一 个 空 结 尾 的 字 符 串 , 该 字 符 串 是 模 板 资 源 的 名 字 。

说 明

此 成 员 函 数 用 来 构 造 一 个 CPropertyPage 对 象 。 在 满 足 了 下 列 所 有 条 件 后 , 此对 象 会 被 显 示 :

  • 已 经 用 CPropertySheet::AddPage 将 此 页 添 加 到 一 个 属 性 表 中

  • 已 经 调 用 了 属 性 表 的 DoModal 或 Create 函 数 。

  • 用 户 已 经 选 择 了 ( 调 整 到 ) 这 一 页 。

如 果 没 有 调 用 另 一 个 构 造 函 数 ,则调用 Construct 。Construct 成 员 函 数 是 灵 活 的 ,

因 为 你 可 以 让 参 数 为 空 , 然 后 在 你 的 代 码 中 的 任 何 地 方 来 指 定 多 个 参 数 和 构造 。

当 你 是 在 处 理 数 组 时 , 你 就 必 须 使 用 Construct , 而 且 你 必 须 为 数 组 的 每 一 个 成员 调 用 Construc t, 以 使 数 据 成 员 可 以 被 分 配 适 当 的 值 。

请 参 阅 CPropertyPage:: CPropertyPage , CPropertySheet::DoModal, CPropertySheet::AddPage

CPropertyPage::CPropertyPage

CPropertyPage();

CPropertyPage( UINT nIDTemplate , UINT nIDCaption = 0 ); CPropertyPage( LPCTSTR lpszTemplateNam e, UINT nIDCaption = 0 );

参 数

nIDTemplate

用 于 此 页 的 模 板 ID 。

nIDCaption

用 来 放 在 此 页 的 标 签 中 的 名 字 ID 。 如 果 是 0 , 则 名 字 将 从 此 页 的 对 话 框 模板 中 取 得 。

lpszTemplateName

指 向 一 个 字 符 串 , 该 字 符 串 包 含 了 用 于 此 页 的 模 板 的 名 字 。 不 可 以 是

NULL 。

说 明

此 函 数 用 来 构 造 一 个 CPropertyPage 对 象 。 在 满 足 下 列 条 件 之 后 , 此 对 象 将 被显 示 :

  • 已 经 用 CPropertySheet::AddPage 将 此 页 添 加 到 一 个 属 性 表 中

  • 已 经 调 用 了 属 性 表 的 DoModal 或 Create 函 数 。

  • 用 户 已 经 选 择 了 ( 调 整 到 ) 这 一 页 。

如 果 你 有 多 个 参 数 ( 例 如 , 你 正 使 用 数 组 ) , 则 使 用 CPropertySheet::Construct

来 代 替 CPropertyPage。

请 参 阅 CPropertySheet::Create , CPropertySheet::DoModal ,

CPropertySheet::AddPage,

CPropertyPage::Construct

CPropertyPage::OnApply virtual BOOL OnApply(); 返 回 值

如 果 改 变 被 接 受 则 返 回 非 零 值 ; 否 则 返 回 0 。

说 明

当 用 户 选 择 O K 或 Apply Now 按 钮 后 , 框 架 调 用 此 函 数 。 当 框 架 调 用 此 函 数 时 , 对 属 性 表 中 的 所 有 属 性 页 做 的 改 变 都 被 接 受 了 , 属 性 表 保 持 焦 点 , OnApply 返回 TRU E( 值 1 )。在 框 架 可 以 调 用 OnApply 之 前 ,你 必 须 已 经 调 用 了 SetModified 并 将 它 的 参 数 设 置 为 TRU E 。 这 将 会 使 得 在 用 户 一 进 行 有 关 属 性 页 的 改 变 时 就激 活 Apply Now 按 钮 。

重 载 这 个 函 数 来 指 定 当 用 户 单 击 Apply Now 按 钮 时 , 你 的 程 序 会 进 行 什 么 动作 。 在 重 载 时 , 函 数 应 该 返 回 TRUE 来 表 示 接 受 改 变 , 返 回 FALSE 来 表 示 禁止 改 变 。

OnApply 的 缺 省 实 现 调 用 OnOK 。

如 果 要 获 取 更 多 有 关 当 用 户 在 一 个 属 性 表 中 按 下 Apply Now 或 OK 按 钮 时 发 送

的 通 知 消 息 的 信 息 , 请 参 见 W in32 文 档 中 的 PSN_APPLY 。

请 参 阅 CPropertyPage::SetModified , CPropertyPage::OnOK

CPropertyPage::OnCancel

virtual void OnCancel();

说 明

当 选 择 Cancel 按 钮 时 , 框 架 调 用 此 成 员 函 数 。 重 载 这 个 成 员 函 数 来 执 行 Cancel

按 钮 的 动 作 。 缺 省 的 实 现 忽 略 所 做 的 任 何 改 变 。

请 参 阅 CPropertyPage::OnApply , CDialog::OnCance l, CPropertyPage::OnOK

C PropertyPage::OnKillActive

virtual BOOL OnKillActive();

返 回 值

如 果 数 据 被 成 功 更 新 则 返 回 非 零 值 ; 否 则 返 回 0 。

说 明

当 页 不 再 是 活 动 页 时 , 框 架 调 用 此 函 数 。 重 载 这 个 成 员 函 数 来 执 行 指 定 的 数 据确 认 任 务 。

此 成 员 函 数 的 缺 省 实 现 将 对 属 性 页 中 的 控 件 所 做 的 设 置 拷 贝 到 属 性 页 的 成 员 变量 中 。 如 果 数 据 没 有 被 成 功 地 更 新 , 则 属 于 一 个 对 话 框 数 据 确 认( DDV ) 错 误 , 该 页 保 持 焦 点 。

在 此 成 员 函 数 成 功 返 回 之 后 , 框 架 将 调 用 此 页 的 OnOK 函 数 。

请 参 阅 CWnd::UpdateData ,CPropertyPage::OnOK ,CPropertyPage::OnSetActive

CPropertyPage::OnOK

virtual void OnOK();

说 明

当 用 户 选 择 了 O K 或 Apply Now 按 钮 时 , 在 框 架 调 用 了 OnKillActive 之 后 , 框架 立 即 调 用 此 函 数 。 重 载 这 个 成 员 函 数 来 实 现 当 用 户 解 散 整 个 属 性 表 时 , 执 行对 当 前 活 动 页 指 定 的 行 为 。

此 成 员 函 数 的 缺 省 实 现 将 该 页 标 记 为 “ 清 除 ( clear ) ” 来 反 映 数 据 已 经 在

OnKillActive 函 数 中 更 新 了 。

请 参 阅 CDialog::OnOK, CPropertyPage::OnKillActive

CPropertyPage::OnQueryCancel

virtual BOOL OnQueryCancel();

返 回 值

如 果 禁 止 取 消 操 作 则 返 回 FALSE ; 如 果 允 许 取 消 操 作 则 返 回 TRUE 。

说 明

当 用 户 单 击 Cancel 时 , 并 在 取 消 动 作 发 生 之 前 , 框 架 调 用 此 成 员 函 数 。重 载 此 成 员 函 数 来 指 定 当 用 户 单 击 Cancel 按 钮 时 程 序 要 做 的 动 作 。OnQueryCancel 的 缺 省 实 现 返 回 TRU E 。

CPropertyPage::OnReset

virtual void OnReset();

当 用 户 选 择 Cancel 按 钮 时 , 可 以 调 用 此 成 员 函 数 。 当 框 架 调 用 此 函 数 时 , 用 户向 前 对 所 有 属 性 页 所 做 的 选 择 Apply Now 按 钮 确 认 的 改 变 都 将 被 放 弃 , 而 属 性表 保 持 焦 点 。

重 载 这 个 成 员 函 数 来 指 定 当 用 户 单 击 Cancel 按 钮 时 程 序 将 执 行 的 动 作 。

OnReset 的 缺 省 实 现 不 做 任 何 事 情 。

请 参 阅 CPropertyPage::OnCancel , CPropertyPage::OnApply

CPropertyPage::OnSetActive

virtual BOOL OnSetActive();

如 果 成 功 地 激 活 了 此 页 则 返 回 非 零 值 ; 否 则 返 回 0 。

说 明

当 用 户 选 择 了 此 页 并 将 其 变 为 活 动 页 时 , 框 架 调 用 这 个 成 员 函 数 。 重 载 此 成 员函 数 来 执 行 当 一 个 页 被 激 活 时 要 执 行 的 任 务 。 你 的 关 于 这 个 成 员 函 数 的 重 载 应该 在 做 任 何 其 它 处 理 之 前 调 用 缺 省 的 版 本 。

缺 省 的 实 现 为 该 页 创 建 窗 口 ( 如 果 在 此 之 前 没 有 创 建 的 话 ) , 并 使 它 成 为 活 动页 。

请 参 阅 CPropertyPage::OnKillActive

CPropertyPage::On W izardBack virtual LRESULT OnWizardBack(); 返 回 值

如 果 自 动 前 进 到 下 一 页 , 则 返 回 0 ; 如 果 禁 止 页 改 变 , 则 返 回 -1 。 如 果 所 到 的页 是 除 下 一 页 之 外 的 其 它 页 , 则 返 回 要 显 示 的 对 话 框 的 标 识 符 。

说 明

当 用 户 在 一 个 向 导 中 单 击 Back 按 钮 时 , 框 架 调 用 这 个 成 员 函 数 。重 载 此 成 员 函 数 来 指 定 当 按 下 Back 按 钮 时 用 户 必 须 做 的 一 些 操 作 。

要 获 取 更 多 有 关 如 何 创 建 一 个 向 导 类 型 的 属 性 表 的 信 息 , 请 参 见

CPropertySheet::SetWizard- Mode 。

请 参 阅 CPropertySheet::SetWizardMode

CPropertyPage::On W izardFinish

virtual BOOL OnWizardFinish();

返 回 值

当 向 导 完 成 时 如 果 属 性 表 被 销 毁 , 则 返 回 非 零 值 ; 否 则 返 回 零 。

说 明

当 用 户 在 一 个 向 导 中 单 击 Finish 按 钮 时 框 架 调 用 此 成 员 函 数 。 当 框 架 调 用 这 个成 员 函 数 时 , 在 Finish 按 钮 被 按 下 并 且 OnWizardFinish 返 回 TRUE ( 一 个 非 零值 ) 时 , 属 性 表 被 销 毁 。

重 载 这 个 函 数 来 指 定 当 Finish 按 钮 被 按 下 时 , 用 户 必 须 执 行 的 一 些 动 作 。 当 重

载 这 个 函 数 时 , 返 回 FALSE 来 禁 止 属 性 表 被 销 毁 。

要 获 取 更 多 有 关 当 用 户 在 一 个 向 导 属 性 表 中 按 下 Finish 按 钮 时 发 送 的 通 知 消 息的 信 息 , 请 参 见 W in32 文 档 中 的 PSN_WIZFINISH 。

如 果 要 获 取 更 多 关 于 如 何 创 建 一 个 向 导 类 型 的 属 性 表 的 信 息 , 请 参 见

CPropertySheet::Set- WizardMode 。

请 参 阅 CPropertyPage::SetWizardMode

CPropertyPage::On W izardNext virtual LRESULT OnWizardNext(); 返 回 值

如 果 自 动 前 进 到 下 一 页 , 则 返 回 0 ; 如 果 禁 止 页 改 变 , 则 返 回 -1 。 如 果 所 到 的

页 是 除 下 一 页 之 外 的 其 它 页 , 则 返 回 要 显 示 的 对 话 框 的 标 识 符 。

说 明

当 用 户 在 一 个 向 导 中 单 击 Next 按 钮 时 , 框 架 调 用 这 个 成 员 函 数 。

重 载 这 个 成 员 函 数 来 指 定 当 Next 按 钮 被 按 下 时 用 户 必 须 做 的 某 些 动 作 。

如 果 要 获 取 更 多 关 于 如 何 创 建 一 个 向 导 类 型 的 属 性 表 的 信 息 , 请 参 见

CPropertySheet::Set- WizardMode 。

请 参 阅 CPropertySheet::SetWizardMode

CPropertyPage::QuerySiblings

LRESULT QuerySiblings( WPARAM wParam , LPARAM lParam );

返 回 值

如 果 在 属 性 表 中 的 所 有 页 都 返 回 0 , 则 函 数 返 回 0 ; 否 则 , 返 回 属 性 表 中 的 每一 页 返 回 的 非 零 值 。

参 数

wParam

指 定 附 加 的 与 消 息 相 关 的 信 息 。

lParam

指 定 附 加 的 与 消 息 相 关 的 信 息 。

说 明

此 成 员 函 数 用 来 将 一 个 消 息 向 前 传 递 给 属 性 表 中 的 每 一 页 。 如 果 有 一 个 页 返 回一 个 非 零 值 , 则 属 性 表 不 再 将 消 息 发 送 给 后 续 页 。

CPropertyPage::SetModified

void SetModified( BOOL bChanged = TRUE );

参 数

bChanged

如 果 是 TRUE , 则 表 明 在 最 后 一 次 应 用 后 属 性 页 的 设 置 被 修 改 了 ; 如 果是 FALSE , 则 表 明 属 性 页 的 设 置 被 应 用 或 被 忽 略 。

说 明

此 成 员 函 数 用 来 使 Apply Now 按 钮 有 效 或 无 效 , 这 要 根 据 属 性 页 中 的 设 置 是 否应 该 被 应 用 到 适 当 的 外 部 对 象 。

框 架 知 道 哪 一 页 是 “ 脏 的 ” , 就 是 那 些 你 对 它 们 调 用 了 SetModified(TRUE) 的属 性 页 。 如 果 你 对 某 一 属 性 页 调 用 了 SetModified(TRUE ), 则 Apply Now 按钮

按 钮 将 总 是 无 效 的 , 但 是 只 有 在 没 有 任 何 一 个 属 性 页 是 “ 脏 的 ” 的 时 候 。

请 参 阅 CPropertyPage::CancelToClose

数 据 成 员

CPropertyPage::m_psp

说 明

m_psp 是 一 个 结 构 , 它 的 成 员 保 存 了 PROPSHEETPAGE 的 特 征 。 在 一 个 属 性页 被 构 造 之 后 , 使 用 这 个 结 构 来 初 始 化 该 属 性 页 的 外 观 。

如 果 要 获 取 更 多 关 于 这 个 结 构 的 消 息 , 包 括 它 的 成 员 的 列 表 , 请 参 见“ W indows

请 参 阅 CPropertyShee t, PROPSHEETPAGE