转载自《计算机世界日报》 (文/周学泳)
去 年 以 来, 笔 者 参 与 完 成 了 国 内 几 个 商 品 软 件 的 开 发 工 作, 感 觉 到 底
这 种 实 战 和 平 时 自 己 练 习 编 程 不 同, 短 时 间 内 编 程 水 平 得 到 极 大 的 提
高。 有 些 项 目 是 用VB 做 的, 接 这 些 项 目 之 前 本 人 还 根 本 没 有 用 过VB, 虽
然VB 较 之VC++ 为 简 单, 容 易 入 门, 但 是 要 弄 得 清 楚 彻 底 也 不 是 易 事, 在
开 发 中, 本 人 积 累 了 一 些 经 验, 在 此 写 出 来 与 大 家 共 享, 有 偏 颇 之 处 请
指 正。 下 面 将 针 对 开 发 中 具 体 的 问 题, 逐 一 展 开 叙 述:
一、
界 面 设 计
----
1、 一 般 性 原 则
----
界 面 设 计 的 一 般 性 原 则, 对C++ 的 程 序 员 也 适 用。
- 界
面 的 整 体 性。 整 体 性 在 界 面 设 计 中 最 容 易 违 反, 同 时 也 最 容 易 修
改 和 避 免。 例 如, 在 菜 单 和 联 机 帮 助 中 必 须 使 用 相 同 的 术 语; 对 话
框 必 须 具 有 相 同 的 风 格; 美 工 在 对 图 案、 图 标 等 设 计 时 必 须 考 虑
到 统 一、 协 调 和 美 观 等 等。
- 良
好 的 交 互 性。 对 于 某 些 软 件 来 说, 其 使 用 者 往 往 不 是 计 算 机 的 专
业 人 员, 因 此 需 要 具 有 友 好 交 互 的 界 面, 对 操 作 人 员 的 重 要 操 作
要 提 供 信 息 反 馈。 设 计 良 好 的 联 机 帮 助。 虽 然 对 于 熟 练 用 户 来 说,
联 机 帮 助 并 非 必 不 可 少, 但 是 对 于 大 多 数 不 熟 练 的 新 用 户 来 说,
联 机 帮 助 具 有 非 常 重 要 的 作 用。
- 操
作 的 便 捷 性。 常 用 操 作 的 使 用 频 度 大, 应 该 减 少 操 作 序 列 的 长 度。
例 如, 为 文 件 的 常 用 操 作 如 打 开、 存 盘、 另 存 等 设 置 快 捷 键。 使 常
用 操 作 具 有 捷 径, 不 仅 会 提 高 用 户 的 工 作 效 率, 还 使 得 界 面 在 功
能 实 现 上 简 洁 和 高 效。
- 设
置 错 误 处 理。 使 用 者 操 作 中 可 能 出 现 许 多 在 程 序 设 计 没 注 意 的 问
题, 在 测 试 时 也 没 有 发 现, 所 以 必 须 提 供 简 单 和 容 易 理 解 的 错 误
处 理 功 能, 在 出 现 错 误 时, 系 统 应 该 能 检 测 出 错 误, 错 误 出 现 后 系
统 的 状 态 不 发 生 变 化, 或 者 系 统 要 提 供 错 误 恢 复 的 指 导。
----
2、 软 件 封 面 技 术
----
封 面 技 术 在 软 件 开 发 中 越 来 越 成 为 一 种 标 准, 一 个 漂 亮 而 醒 目 的 封 面
会 使 软 件 更 加 充 满 魅 力, 拿 微 软 的VB5.0、VC++5.0 来 说, 其 简 洁 美 观、
具 有 真 实 三 维 效 果 的 封 面 给 所 有 使 用 者 留 下 了 深 刻 的 印 象。
----
要 制 作 一 个 专 业 的 软 件 封 面, 首 先 制 作 一 个 用 于 封 面 的 窗 体, 命 名 为FrmCover。
- 将
该 窗 体 属 性 中 的BorderStyle 设 置 为0-None, 并 将Appearence 属
性 设 为1-3D, 在FrmCover 窗 体 中 可 加 入PictureBox 或Image 设 置
封 面 图 案, 加 入TextBox 或Label 显 示 文 字 信 息。
- 加
入 一 个Timer, 计 时 到 指 定 时 间 关 闭FrmCover。
- 在
主 程 序 启 动 时, 先Show FrmCover, 并 按 下 面 的 代 码 设 置 封 面 总 保
持 在 最 前 面。
----
声 明 部 分:
Public Const HWND_TOPMOST = -1
Public Const HWND_NOTOPMOST = -2
Public Const SWP_NOMOVE = &H2
Public Const SWP_NOSIZE = &H1
Public Const TOPMOST_FLAGS =
SWP_NOMOVE Or SWP_NOSIZE
Public Declare Function SetWindowPos _
Lib "user32" Alias "SetWindowPos" _
(ByVal hwnd As Long, ByVal hWndInsertAfter As Long, _
ByVal x As Long, ByVal y As Long, _
ByVal cx As Long, ByVal cy As Long, _
ByVal wFlags As Long) As Long
'hWnd为作为封面窗体的句柄
'hWndInsertAfter指示为封面窗体前载入的窗体
'X为封面窗体左上角的X坐标
'Y为封面窗体左上角的Y坐标
'cx为窗体新宽度
'cy为窗体新高度
'wFlags影响窗体大小和位置的16位值
'SWP_NOMOVE为不移动窗体,即忽略cx和cy
'SWP_NOSIZE为不改变窗体大小,即忽略X和Y
调用部分:
Private Sub Form_Load()
Dim r As Long
r = SetWindowPos(Me.hwnd,
HWND_TOPMOST, 0, 0, 0, _
0, TOPMOST_FLAGS)
End Sub
二、
编 程 经 验
----
1、 关 于 路 径
----
在 平 时 的 编 程 练 习 中 通 常 直 接 调 用 硬 盘 中 某 处 的 文 件, 但 是 作 为 商 品
软 件 通 常 由 用 户 将 程 序 安 装 在 自 定 义 的 目 录, 所 以 切 不 可 在 编 程 时 使
用 直 接 路 径, 否 则 肯 定 找 不 到 所 需 的 文 件 而 出 错。
----
在VB 中 提 供 了 一 个App 对 象, 是 通 过 关 键 字 App 访 问 的 全 局 对 象。 它 指
定 如 下 信 息: 应 用 程 序 的 标 题、 版 本 信 息、 可 执 行 文 件 和 帮 助 文 件 的 路
径 及 名 称 以 及 是 否 运 行 前 一 个 应 用 程 序 的 示 例。App 对 象 的Path 属 性
是 从 开 发 环 境 运 行 该 应 用 程 序 时 .VBP 工 程 文 件 的 路 径, 或 者 当 把 应
用 程 序 当 作 一 个 可 执 行 文 件 运 行 时 .exe 文 件 的 路 径。
----
2、 使 用 资 源 文 件
----
在VB 中 常 常 要 用 到 字 符 串、 位 图、 图 标 和 数 据 等 资 源, 使 用 资 源 文 件 可
以 提 高 性 能, 因 为 字 符 串、 位 图、 图 标 和 数 据 可 以 不 必 在 调 用 窗 体 或 模
块 时 就 全 部 加 载, 而 可 以 按 需 要 随 时 从 资 源 文 件 中 加 载, 把 需 要 翻 译
的 资 源 单 独 放 在 一 个 资 源 文 件 中, 因 此 没 有 必 要 访 问 源 代 码 或 重 新 编
译 应 用 程 序, 提 高 了 程 序 的 可 移 植 性。
----
在 一 个 窗 体 设 置 Picture 属 性, 大 家 可 以 测 试 一 下 分 别 用LoadPicture、
或 直 接 将 位 图 路 径 写 入 属 性 的 效 果。 使 用LoadPicture 加 载 速 度 很 慢
而 且 位 图 文 件 也 需 要 定 位, 使 用 直 接 写 入 属 性 虽 然 可 以 执 行 时 脱 离 该
位 图, 但 也 会 使 编 译 后 的Exe 硕 大 无 比。
----
3、 关 于 注 册 表
----
注 册 表 是 一 个 集 中 管 理 的 数 据 库, 它 包 含 有 关 计 算 机 的 配 置、 硬 件 和
软 件 的 各 类 信 息, 在 引 导、 系 统 初 始 化、 登 录、 执 行 程 序 等 进 程 中 被 用
到, 在Windows 环 境 下, 注 册 表 已 经 从 本 质 上 代 替 了 所 有 基 于MS-Dos 的
配 置 文 件。
----
VB 可 以 使 用API 函 数 来 访 问 注 册 表。 实 际 上, 创 建 一 个 注 册 表 文 件 比
编 写 一 个 调 用API 的 进 程 在 注 册 表 中 设 定 值 方 便 得 多, 这 是 因 为 所 要
做 的 仅 是 编 写 包 含 注 册 表 信 息 的ASCII 文 本 文 件, 然 后 运 行regedit.exe,
象 传 递 参 数 一 样 传 递*.reg 文 件 名。
----
4、 关 于DLL 传 递 参 数
----
缺 省 时,VB 默 认 按 地 址 传 递 所 有 参 数, 这 就 意 味 着 传 递 的 不 是 变 量 的
值, 而 是 一 个32 位 的 指 向 变 量 的 指 针。 事 实 上 可 以 发 现 大 多 数 传 给DLL
函 数 和 子 例 程 的 参 数 都 是 按 值 传 递, 唯 一 例 外 的 是 传 递 字 符 串, 数 组
和 用 户 自 定 义 类 型。 因 为 缺 省 时VB 变 量 按 地 址 传 递。 因 此 要 求 以 值 传
递 参 数 时, 必 须 用 关 键 字By Val 显 式 声 明。
----
VB5.0 支 持 函 数 指 针 是 通 过Address Of 关 键 词 的 使 用 来 实 现 的, 被 作
为 参 数 加 在 函 数 名 前, 用 以 指 明 传 递 函 数 或 子 例 程 的 地 址 给DLL 程 序。
但 是 一 般VB 的 程 序 员 都 不 使 用 函 数 指 针。
----
5、 使 用 第 三 方 控 件
----
合 理 使 用 第 三 方 控 件, 可 以 大 大 提 高 开 发 工 作 的 效 率, 不 必 为 一 些 重
复 劳 动 花 时 间, 并 使 软 件 具 有 极 强 的 专 业 性。 但 是 必 须 如 果 在 自 己 的
商 品 软 件 中 使 用 第 三 方 控 件, 一 定 要 注 意 版 权 问 题。
三、
测 试 与 调 试
----
一 个 软 件 能 否 成 为 好 的 商 品 软 件, 测 试 和 调 试 起 着 关 键 作 用,Bug 重 重
的 软 件 宣 传 得 再 好 也 没 有 用 的。 下 面 谈 谈 测 试 和 调 试 技 术 中 应 注 意 的
地 方:
- 制
订 测 试 计 划。 有 了 测 试 计 划, 才 能 确 保 应 用 程 序 工 作 正 常。 软 件 公
司、 开 发 机 构 都 应 该 更 加 自 己 的 实 际 情 况 制 订 测 试 计 划, 并 且 应
该 权 衡 一 下 制 订 合 理 测 试 计 划 将 带 来 的 好 处 与 所 花 时 间 之 间 的
关 系。 具 体 而 言, 可 以 用Word 或Excel 编 写 一 个 简 单 的 测 试 计 划,
按 单 元 测 试、 整 体 测 试、 系 统 测 试 来 进 行, 还 应 包 括 如 何 进 行, 诸
如 针 对 操 作 系 统、RAM 配 置、CPU 类 型、 外 设 类 型、 数 据 库 类 型 的 不
同 来 进 行 测 试 等 等。 如 果 大 家 想 获 得 关 于 软 件 项 目 测 试 的 详 细 资
料, 可 以 到http://www.microsoft.com/servad/msconsult.htm
看 看。
- 在
代 码 中 使 用 大 量 的 注 释 有 助 于 纠 正 错 误, 这 些 注 释 不 随 项 目 一 起
编 译, 所 以 不 要 担 心 过 多 的 注 释 会 使 项 目 变 得 庞 大, 而 且 别 的 程
序 员 也 可 通 过 注 释 来 读 懂 你 的 程 序, 便 于 团 队 工 作。 在 程 序 代 码
中 使 用Option Explicit 关 键 字, 确 保 项 目 中 的 所 有 窗 体、 模 块、
类 模 块 中 的 所 有General Declarations( 通 用 声 明 区) 都 有Option
Explicit 关 键 字, 这 可 以 保 证 每 一 变 量 在 使 用 前 必 须 先 声 明, 以
防 止 拼 写 错 的 变 量 将 被 认 为 是 新 的 变 量。
- 当
不 清 楚 过 程 为 什 么 不 按 设 想 的 方 式 工 作 时, 可 以 设 置 断 点, 一 步
一 步 地 跟 踪 执 行 代 码, 在 你 认 为 可 能 出 错 的 地 方 设 置 断 点, 如 果
不 能 确 定 问 题 所 在, 可 以 在 第 一 个 可 能 的 代 码 行 上 设 置 断 点, 而
对 于 那 些 注 释 及 行 标 记 变 量 声 明 所 在 的 代 码 行 或 隐 藏 模 块 行, 不
能 设 置 断 点。
- VB
不 能 在 应 用 程 序 运 行 时 进 行 调 试, 但 是 可 以 在 代 码 中 加 入 一 些 处
理 出 错 的 代 码 来 帮 助 调 试, 这 就 可 以 识 别 什 么 时 候、 什 么 地 方 出
了 什 么 样 的 的 错 误 及 为 什 么 出 错。
四、
制 作 安 装 软 件
----
完 成 了 软 件 测 试, 确 认 没 有 错 误 之 后, 就 可 以 发 布 软 件 了,VB 有 自 带 的
应 用 程 序 安 装 向 导, 许 多 人 可 能 认 为 需 要 一 些 自 己 定 义 的 安 装, 那 么
请 看 下 面 部 分。
- 安
装 向 导 生 成 程 序 的 缺 省 安 装 目 录 是 在 Program File 下 的, 要 修
改 该 缺 省 安 装 目 录, 只 要 打 开 已 经 生 成 的 安 装 文 件 Setup.1st 中[Setup]
DefaultDir=$(ProgramFiles)\XXXXXX, 把$(ProgramFiles) 换
成 $(WinSysPath) 或 自 定 义 的 目 录。
- 在
使 用 安 装 向 导 时, 加 入 相 应 的 文 件: 如Readme, 帮 助 文 件 等 可 以 修
改 Setup.lst 文 件 中 的[Files], 例 如 要 把 File1 放 到 程 序 组 中,
修 改File1 的 最 后 两 项:File1 = .... "",""
改 为 -> File1 = .... " 程 序 项 名 称"," 应
用 全 路 径"。
- [Setup]
中 的 DefProgramGroup 为 组 名, 但 是 如 果 只 有 一 个 File 需 要 安
装, 不 会 建 立 程 序 组。
----
由 于 篇 幅 的 限 制, 对VB 的 类 的 使 用、 外 接 程 序、 动 态 链 接 库、ActiveX 都
没 有 具 体 谈 到, 留 待 以 后 再 为 补 充( 以 上 程 序 均 在VB5.0 中 文 企 业 版 调
试 通 过)。