用VB5开发商品软件的经验谈

发表于:2007-07-14来源:作者:点击数: 标签:
作者:周学泳 ----去年以来笔者参与完成了国内几个商品软件的 开发 工作,感觉到底这种实战和平时自己练习编程不同,短时间内编程水平得到极大的提高。有些项目是用VB做的,接这些项目之前本人还根本没有用过VB,虽然VB较之VC++为简单,容易入门,但是要弄得
作者:周学泳

----去年以来笔者参与完成了国内几个商品软件的开发工作,感觉到底这种实战和平时自己练习编程不同,短时间内编程水平得到极大的提高。有些项目是用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 中 文 企 业 版 调 试 通 过)。

原文转自:http://www.ltesting.net