荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: Second (石开), 信区: Program
标  题: 实 现 操 作 过 程 提 示 对 话 框 的 一 种 方 法
发信站: 荔园晨风BBS站 (Wed Jun  6 07:21:10 2001), 转信

在 使 用Windows95 进 行 文 件 拷 贝 或 者 删 除 操 作 时, 您 一 定 见 到 过
 那 种 具 有 飞 文 件 动 画 的 操 作 过 程 提 示 对 话 框。 这 一 功 能 的 加
 入 不 仅 使 我 们 能 够 在 操 作 过 程 当 中 随 时 取 消 操 作, 而 且 也 使
 文 件 拷 贝 或 者 删 除 操 作 变 得 生 动 活 泼。 其 实, 在 使 用Visual C+
+ 进 行 应 用 程 序 设 计 时, 我 们 也 可 以 使 用 下 述 方 法 在 适 当 位
置 加 入 自 己 的 操 作 过 程 提 示 对 话 框。

为 每 一 个 操 作 过 程 提 示 对 话 框 创 建 一 个 对 话 框 类。 为 了 下 面
 叙 述 方 便, 我 们 只 假 设 应 用 程 序 需 要 一 个 操 作 过 程 提 示 对 话
 框 并 以“CModel” 作 为 对 应 的 对 话 框 类 的 名 字。

使 用Visual C++ 提 供 的 资 源 编 辑 器 编 辑 提 示 对 话 框, 比 如 加 入 一
 些 文 字 说 明 和 动 画 等。

在CModel 类 的 头 文 件(Model.h) 中, 加 入 两 个 成 员 变 量,
CWnd* m_pParent; // 指 向 调 用 该 提 示 对 话 框 的 框 架 类( 或 对 话 框 类
), 即 它 的“ 父 类” int m_nID;// 记 录 该 提 示 对 话 框 的ID 号
以 及 下 面 两 个 成 员 函 数:

CModel(CWnd* pParent = NULL); // 舍 弃 原 有 的 构 造 函 数, 或 者 把 原 函
 数 修 改 成 这 种 无 模 式 对 话 框 的 构 造 函 数
BOOL Create(); // 该 函 数 将 调 用 创 建 基 类 的Create() 函 数 创 建 对 话
 框
在Model.cpp 文 件 中, 加 入 相 应 函 数 的 实 现 部 分。
CModel::CModel(CWnd* pParent /*=NULL*/)
 : CDialog(CModel::IDD, pParent)
{
 m_pParent=pParent;
 m_nID=CModel::IDD;
 //{{AFX_DATA_INIT(CModel)
  // NOTE: the ClassWizard will add member initialization here
 //}}AFX_DATA_INIT
}
BOOL CModel::Create()
{
 return CDialog::Create(m_nID,m_pParent);
}

同 时 按 下Ctrl 和W 键 或 直 接 单 击 工 具 条 上 的ClassWizard 按 钮, 打 开
ClassWizard 对 话 框。 在 类 名(Class name) 列 表 框 中 选 择 该 提 示 对 话
 框 类, 在Object IDs 列 表 框 中 选 择 该 类 的 类 名 后, 在 消 息(Message
s) 列 表 框 中 选 择PostNcDestroy 消 息 并 双 击 它, 这 时ClassWizard 就 会
 在 该 对 话 框 类 中 加 入 一 个PostNcDestroy() 函 数。 该 函 数 将 会 在 对
 话 框 窗 口 消 失 后, 由OnNcDestroy() 函 数 调 用。 因 此, 可 以 在 该 函
 数 中 加 入 一 些 扫 尾 工 作, 例 如 数 据 传 送, 释 放 指 针 空 间 等。
void CModel::PostNcDestroy()
{
 // TODO: Add your specialized code here and/or call the base class
 delete this;
 CDialog::PostNcDestroy();
}
在 要 调 用 提 示 对 话 框 类 的 类 的 头 文 件 中, 先 包 含(#include)CMode
l 类 的 头 文 件, 再 声 明 一 个 指 向CModel 类 的 对 象 的 指 针, 如m_Dlg
, 并 在 该 类 的 构 造 函 数 中, 加 入“m_Dlg = NULL;” 一 句。 然 后, 在
 打 开 和 关 闭 提 示 对 话 框 的 函 数 中 加 入 如 下 一 段 程 序:
 if (m_Dlg==NULL) {//如果当前没用提示对话框在活动,就创建一个
  m_Dlg = new CModel(this);
  m_Dlg->Create();
  GetDlgItem(IDC_EXPORT)->EnableWindow(FALSE);
 }
 else//否则就激活它
  m_Dlg->SetActiveWindow();
 另外,再在要关闭提示对话框的地方,加入如下语句:
 m_Dlg->DestroyWindow();
 m_Dlg=NULL;

---- 至 此, 您 已 经 拥 有 了 自 己 的 过 程 操 作 提 示 对 话 框。 不 过,
 它 还 不 具 有 动 画 和 随 时 取 消 操 作 的 功 能。 您 不 妨 尝 试 着 加 入
 这 些 功 能。 另 外, 笔 者 也 曾 尝 试 过 用 下 面 介 绍 的 方 法 实 现 过
 程 操 作 提 示 对 话 框。 两 种 方 法 比 较, 可 谓 各 有 千 秋。 如 果 您
希 望 上 面 设 计 的 过 程 提 示 对 话 框 能 够 被 多 个 应 用 程 序 共 享,
 那 么 最 好 把 提 示 对 话 框 作 为 独 立 的 进 程 来 调 用。 但 是, 当 您
 还 希 望 在 提 示 对 话 框 与 调 用 者 之 间 传 输 数 据 的 话, 似 乎 这 一
 部 分 介 绍 的 实 现 方 法 更 简 洁 且 更 有 效。

--
                            既然热爱生命
                            那么,
                            一切都在意料之中。

※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.28.190]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店