如何创建Windows 95应用程序的帮助系统

尹 章 儒

对 于 一 个 成 熟 的 应 用 程 序 系 统 来 说, 方 便 详 尽 的 帮 助 系 统 是 必 不 可 少 的。 特 别 是 当 今 流 行 的Windows 95 环 境 下 的 图 形 样 式 帮 助 系 统 中 可 以 包 含 图 形、 经 过 格 式 化 编 排 的 文 本、 声 音 和 动 画 等, 为 应 用 程 序 增 色 不 少( 如 图 一 所 示)。

0301135.gif (10574 bytes)

在Windows 95 环 境 下, 利 用Visual Foxpro 提 供 的Microsoft Help Workshop 工 具, 可 以 创 建 功 能 较 为 完 善 的 应 用 程 序 帮 助 系 统。

创 建Windows 95 下 的 帮 助 系 统 时 首 先 应 该 明 确 以 下 几 个 概 念 :

(1) 帮 助 主 题 : 帮 助 主 题 是 指 帮 助 窗 口 中 的 信 息, 它 通 常 是 以 标 题 开 始 且 包 含 某 一 特 定 任 务、 命 令 或 对 话 框 的 信 息。Help 由 一 个 个“ 主 题” 串 接 而 成, 每 个 主 题 可 由 标 题、 主 题 标 识 字 符 串、 浏 览 顺 序 号 来 识 别。

(2) 标 题 : 标 题 可 由 带 空 格 的 多 个 单 词 组 成, 具 有 描 述 性 的 文 字, 通 常 以“ 主 题” 中 的 首 行 作 为 标 题。 不 同 的 主 题 应 有 不 同 的 标 题, 如 果 出 现 多 个 主 题 共 同 拥 有 一 个 标 题, 系 统 将 会 发 出 警 告。

(3) 主 题 标 识 字 符 串 : 主 题 标 识 字 符 串 是 唯 一 用 来 确 定 主 题 的 字 符 串, 它 只 能 由 字 母、 数 字 或 下 划 线 组 成。

(4) 关 键 词 : 在 生 成 的Help 文 件 中 可 以 根 据 关 键 词 来 搜 索 并 转 到 相 应 的 主 题 上。

(5) 浏 览 顺 序 号 : 浏 览 顺 序 号 用 在 制 作 上 下 文 敏 感 的Help 文 件 中, 它 与 主 题 标 识 字 符 串 一 样 不 能 重 复。

创 建 帮 助 系 统 的 步 骤 如 下 :

(1) 编 辑 帮 助 主 题 文 件( 扩 展 名 为.RTF)。 内 有 具 体 帮 助 信 息 以 及 所 需 的 各 种 编 码, 可 由 一 个 或 多 个 文 件 组 成。

(2) 编 辑 帮 助 项 目 文 件( 扩 展 名 名 为.HPJ)。 内 有 对 主 题 文 件 进 行 编 译 所 需 的 信 息。

(3) 编 辑 帮 助 目 录 文 件( 扩 展 名 为.CNT)。 内 有 帮 助 的 目 录 框 架 信 息。

(4) 编 译 生 成 帮 助 文 件( 扩 展 名 为.HLP)。 内 有 系 统 所 需 的 各 种 帮 助 信 息。

(5) 在 应 用 程 序( 如VB、VFP 或 其 他 高 级 程 序 设 计 语 言) 中 编 写 代 码 调 用 帮 助 系 统(WinHelp), 提 供 帮 助 信 息。

一、 编 辑 帮 助 主 题 文 件

1、 建 立RTF 格 式 文 件
通 常 用Word 来 创 建RTF 文 件, 文 件 中 可 以 包 含 文 本、 位 图 或 图 元 文 件, 甚 至 声 音、 动 画 等。 其 中 应 注 意 两 点 :① 一 个 主 题 结 束 后 应 插 入 一 个 分 页 符, 作 为 主 题 间 的 分 界 ;② 整 个 主 题 文 件 编 辑 完 成 之 后, 保 存 时, 在“ 文 件 类 型” 列 表 框 中 应 选 择RTF( Rich Text Format), 这 时 文 件 以.RTF 为 扩 展 名 存 盘, 以 供 帮 助 编 译 器 使 用。

2、 设 置 脚 注
将 光 标 移 至 主 题 的 最 左 边, 选 择 菜 单 中 的“ 插 入/ 脚 注 和 尾 注”, 选 择“ 脚 注”, 在“ 定 制 脚 注 标 记” 中 输 入 脚 注 符 号, 然 后 回 车, 这 时 激 活 脚 注 窗 口, 输 入 脚 注 内 容。 不 同 的 脚 注 符 号 代 表 不 同 的 含 义, 常 见 的 脚 注 含 义 及 其 符 号 如 表1 所 示:

表1 常 见 脚 注 含 义 及 其 说 明
脚 注 含 义 符 号 说 明
主 题 标 识 字 符 串 # 定 义 一 个 用 来 识 别 主 题 的 标 识 字 符 串。 标 识 字 符 串 要 求 必 须 定 义, 而 且 唯 一, 不 能 为 汉 字, 可 以 包 括 字 母、 数 字、 标 点 符 号 等, 不 能 超 过256 个 字 符。
标 题 $ 指 明 一 个 主 题 的 标 题 名。 主 题 名 可 以 使 用 汉 字。 它 将 出 现 在 帮 助 系 统 中 的“ 查 找”、“ 书 签” 和“ 历 史 窗 口” 对 话 框 中。
关 键 字 K 为 主 题 建 立 一 个 索 引 条 目。 每 个 主 题 可 以 有 一 个 或 多 个 关 键 字, 关 键 字 之 间 用 分 号 隔 开, 关 键 字 中 不 能 使 用 分 号, 可 使 用 汉 字, 一 个 关 键 字 的 最 大 长 度255 个 字 符(127 个 汉 字)。
浏 览 顺 序 号 + 指 定 浏 览 顺 序 号, 以 便 用 户 可 以 通 过 按 钮“》” 和“《” 浏 览 标 题。 浏 览 顺 序 号 由 数 字 和 字 母 组 成, 编 译 时 以ASCII 码 顺 序 排 序。 使 用 数 字 时 只 能 使 用 等 长 的 数 字, 排 序 时 才 能 得 到 预 想 的 效 果。 如 号 码 的 最 多 位 数 为3, 则5 应 写 成005,15 应 写 成015。
另 外, 还 有 其 他 脚 注。 注 意 : 在 所 有 的 脚 注 中, 主 题 标 识 字 符 串(#) 是 必 须 需 要 的, 其 他 脚 注 可 根 据 实 际 情 况 选 用。

3、 设 置 热 点, 建 立 主 题 之 间 的 连 接

帮 助 主 题 中 另 外 的 重 要 的 编 码 是 为 文 本 指 定“ 热 点”, 即 用 鼠 标 单 击“ 热 点” 可 跳 转 到 相 应 主 题 或 弹 出 说 明 窗 口, 对“ 热 点” 处 的 文 本 加 以 帮 助。 前 者 称 为“ 跳 转(Jump) 热 点”, 表 现 为 绿 色 单 下 划 线 形 式 ; 后 者 称 为“ 弹 出(Popup) 热 点”, 表 现 为 绿 色 单 下 点 划 线 形 式。

指 定 跳 转 热 点 : 跳 转 热 点 在 帮 助 主 题 文 件 中 是 带 双 下 划 线 的 文 本。 首 先 选 择 字 符 的 双 下 划 线 格 式, 键 入 跳 转 热 点 文 本, 清 除 双 下 划 线 格 式, 选 择 隐 藏 文 本 格 式, 键 入 跳 转 目 的 地 处 的 主 题 标 识 字 符 串。 清 除 隐 藏 文 本 格 式 后 再 键 入 其 他 正 文。 注 意, 在 隐 藏 文 本 后 换 行 时, 一 定 要 先 清 除 隐 藏 文 本 格 式, 然 后 再 按 回 车 键。

指 定 弹 出 热 点 : 弹 出 热 点 在 帮 助 主 题 文 件 中 是 单 下 划 线 的 文 本。 首 先 选 择 字 符 的 单 下 划 线 格 式, 键 入 弹 出 热 点 文 本, 清 除 单 下 划 线 格 式, 选 择 隐 藏 文 本 格 式, 键 入 在 弹 出 的 附 加 说 明 的 主 题 的 主 题 标 识 字 符 串。 清 除 隐 藏 文 本 格 式 后 再 键 入 其 他 正 文。 同 样, 在 隐 藏 文 本 后 换 行 时, 一 定 要 先 清 除 隐 藏 文 本 格 式, 然 后 再 按 回 车 键。

以 上 两 种 热 点 文 本 均 可 带 有 格 式, 如 字 体、 字 号 和 不 同 的 风 格( 黑 体 或 斜 体) 在 隐 藏 文 本 和 带 下 划 线( 单 或 双) 文 本 间 不 能 有 空 格。 隐 藏 文 本 在 显 示 出 来 时( 选 择Word 工 具 栏 上 的“ 隐 藏/ 显 示” 按 钮 高 亮 时, 隐 藏 文 本 可 显 示 出 来) 为 带 点 划 线 的 正 文。

除 文 本 可 作 为 热 点 外, 图 形 也 可 具 有 以 上 两 种 热 点, 图 形 中 的 热 点 要 使 用 专 用 的 工 具 软 件-- 热 点 编 辑 器(Hot Spot Editor) 才 能 指 定。

4、 建 立 不 可 滚 动 的 标 题 区 域

在Windows 的 帮 助 窗 口 中, 经 常 可 以 见 到 窗 口 上 部 的 标 题 区 域( 有 时 还 会 有 图 形) 是 不 可 滚 动 的, 这 在 显 示 一 个 较 长 的 主 题 时, 使 用 户 总 能 看 到 本 主 题 的 题 目。 用Word 创 建 主 题 文 件 时, 通 过 以 下 方 法 很 容 易 实 现。
在 编 辑 每 一 个 主 题 时, 第 一 行 通 常 是 主 题 的 标 题, 然 后 换 行 再 输 入 主 题 中 的 正 文。 这 时 把 光 标 放 在 第 一 行, 从“ 格 式” 菜 单 中 选 择“ 段 落” 命 令,Word 弹 出 段 落 格 式 设 置 对 话 框, 在 此 对 话 框 中 选 取“ 正 文 排 列” 选 项 卡, 在“ 分 页” 成 组 框 中, 用 鼠 标 点 取“ 与 下 段 同 页” 复 选 框, 关 闭 段 落 格 式 对 话 框。 这 样 第 一 行 经 过 编 译 后 就 会 成 为 不 可 滚 动 的 区 域。 当 然 不 可 滚 动 的 区 域 可 以 有 多 行, 这 时 只 要 选 择 多 行, 然 后 再 设 置“ 与 下 段 同 页” 格 式 即 可。

5、 使 用 图 形 和 图 像
帮 助 主 题 文 件 中 可 使 用 的 图 形 和 图 像 为 点 位 图(BMP 格 式)。 可 用 下 面 两 种 方 法 之 一 引 用 点 位 图 图 形 : 直 接 在 主 题 文 件 中 放 置 点 位 图, 由 于Word 支 持 图 文 混 排, 可 用OLE 方 法 从 其 他 应 用 程 序 中 引 入 图 形 或 图 像, 或 者 由“ 插 入” 菜 单 中 选 择“ 图 片” 命 令, 直 接 插 入 具 有BMP 格 式 的 图 形 文 件 ; 使 用 位 图 索 引 法, 可 以 在 点 位 图 出 现 的 位 置 加 入 下 面 的 语 句 之

一, 就 在 主 题 文 件 中 加 入 了 一 个 位 图 索 引 :
{bmc 图 形 文 件 名} : 把 一 个 点 位 图 当 作 一 个 字 符 处 理, 行 高 由 点 位 图 决 定。
{bml 图 形 文 件 名} : 点 位 图 放 在 一 行 的 左 边, 正 文 可 在 右 边 卷 绕。
{bmr 图 形 文 件 名} : 点 位 图 放 在 一 行 的 右 边, 正 文 可 在 左 边 卷 绕。
其 中 图 形 文 件 名 应 加BMP 扩 展 名。 一 个 点 位 图 可 被 多 处 索 引。 应 该 注 意 的 是, 不 要 给 出 文 件 的 路 径 名。 如 果 需 要 告 诉 编 译 器 在 编 译 时 在 非 工 作 目 录 中 寻 找 点 位 图 文 件, 可 以 在 帮 助 项 目 文 件 的[BITMAP] 字 段 中 给 出 点 位 图 的 全 路 径 名。

二、 创 建 帮 助 项 目 文 件

Help 帮 助 项 目 文 件( 扩 展 名 为.HPJ), 包 含Microsoft Help 编 译 器 把 主 题 文 件 和 其 他 元 素 合 成 帮 助 文 件 所 需 的 全 部 信 息, 项 目 文 件 是 一 个 纯 文 本 文 件, 可 用 任 何 文 本 编 辑 器 来 建 立, 也 可 用 其 他 工 具 建 立。 每 一 个 项 目 文 件 由 一 节 或 多 节 组 成。 每 一 节 有 一 个 节 名, 用 方 括 号([ ]) 括 起 来, 定 义 这 一 节 中 的 语 句 和 选 项 的 目 的 和 格 式。

[OPTIONS] 指 定 控 制 创 建 过 程 的 选 项。 此 节 是 可 选 的, 若 选 用 必 须 在 第 一 节。

[FILES] 指 定 帮 助 的 主 题 文 件, 扩 展 名 为RTF。 这 一 节 是 必 须 的, 可 以 有 一 个 或 多 个 主 题 文 件。

[MAP] 把 上 下 文 串 与 上 下 文 号 相 连 接, 成 为 上 下 文 关 联 的 帮 助。

[CONFIGS] 指 定 在 创 建 帮 助 文 件 中 使 用 的 宏。 这 些 宏 由 帮 助 系 统 调 用 或 用 于 创 建 非 标 准 的 帮 助 菜 单 和 按 钮。 如 用 于 前 后 翻 页 的》《 按 钮, 就 是 由 此 字 段 指 定 的 宏 创 建 的。

[BITMAPS] 指 定 主 题 文 件 中 引 用 的 点 位 图 的 文 件 名, 包 括 路 径。

[WINDOWS] 定 义 帮 助 系 统 使 用 的 主 窗 口 及 次 窗 口 的 标 题、 位 置、 大 小 和 使 用 的 颜 色。 在 帮 助 主 题 文 件 中, 若 设 计 为 跳 转 主 题 使 用 次 级 窗 口, 则 应 包 括 此 段。
VFP 提 供 的Microsoft Help Workshop 用 来 建 立 项 目 文 件 十 分 直 观 方 便, 选 择 菜 单File/New, 选 择Help Project 出 现 创 建 帮 助 项 目 文 件 画 面( 如 图 二)。
0301137.gif (11749 bytes)

图 二 建 立 帮 助 项 目 文 件

三、 创 建 目 录 文 件
目 录 文 件 提 供 了 帮 助 系 统 中 主 题 的 层 次 结 构 视 图, 利 用Microsoft Help Workshop 的 可 视 化 的 编 辑 十 分 方 便 建 立。 选 择 菜 单File/New, 选 择Help Content, 出 现 创 建 目 录 文 件 画 面( 如 图 三)。

 

 

 

图 三 创 建 目 录 文 件

0302137.gif (5860 bytes)
四、 编 译 生 成 帮 助 文 件

帮 助 编 译 器 有 几 个 版 本, 功 能 也 不 尽 相 同。 这 里 利 用Microsoft Help Workshop 下 的HCW 进 行 编 译, 在Microsoft Help Workshop 下 选 择 菜 单File/Compile , 即 可 进 行 编 译, 编 译 过 程 中 出 现 错 误 时, 系 统 会 提 示 出 错 信 息, 以 便 进 行 修 改, 直 到 正 确 无 误 码 为 止。 编 译 时, 系 统 会 提 示 帮 助 系 统 的 有 关 信 息, 若 无 致 命 的 错 误, 将 编 译 生 成 一 个 扩 展 名 为HLP 的 帮 助 文 件, 这 也 是Windows 的 帮 助 系 统 可 以 调 用 的 二 进 制 文 件, 可 用File/Run Winhelp 即 可 欣 赏 到 帮 助。

五、 在 应 用 程 序 中 编 写 代 码 调 用 帮 助 系 统(WinHelp), 提 供 帮 助 信 息
应 用 程 序 用 户 访 问 帮 助 的 途 径 有 三 种 :

(1) 帮 助 菜 单 - 显 示 在 应 用 程 序 主 菜 单 栏 上 的 一 个 菜 单。

(2) 上 下 文 相 关 帮 助 - 当 选 定 某 个 对 象、 控 件 或 菜 单 选 项 并 按F1 键 时 显 示 的 帮 助。

(3)“ 这 是 什 么” 帮 助 - 当 用 户 寻 求 关 于 特 定 对 象 或 控 件 的 帮 助 时 出 现 的 简 单 弹 出 式 提 示。

下 面 以VFP 为 例, 分 别 说 明 如 何 在 应 用 程 序 中 编 写 代 码 调 用 帮 助 系 统。

1、 帮 助 菜 单
要 向 菜 单 标 题 或 菜 单 命 令 指 定 帮 助 标 题, 必 须 在 与 菜 单 标 题 或 菜 单 命 令 相 关 联 的 过 程 中 包 含 SET TOPIC TO 命 令, 然 后 用Help 激 活。

2、 上 下 文 相 关 性
“ 上 下 文 相 关 帮 助” 允 许 用 户 随 时 方 便 地 访 问 与 他 们 在 应 用 程 序 中 所 做 所 见 相 关 的 帮 助 主 题。 例 如, 如 果 用 户 正 在 查 看 一 个 数 据 输 入 表 单,“ 上 下 文 相 关 帮 助” 能 够 提 供 与 那 个 数 据 输 入 表 单 相 关 的 帮 助 主 题。

一 般 地, 通 过 按F1 键 可 以 访 问“ 上 下 文 相 关 帮 助”, 可 以 使 用ON KEY LABEL 指 定 任 意 键 来 激 活“ 上 下 文 相 关 帮 助”。
在“ 表 单” 上 使 用“ 上 下 文 相 关 帮 助”, 必 须 为 应 用 程 序 指 定 帮 助, 然 后 把 特 定 的 帮 助 主 题 与 应 用 程 序 中 不 同 的 对 象 关 联 起 来。 添 加“ 上 下 文 相 关 帮 助” 步 骤 如 下 :

(1) 为 应 用 程 序 指 定 一 个 帮 助 文 件。
通 过 在 代 码 中 包 含SET HELP TO file 命 令( 其 中 file 是 帮 助 的 名 字), 可 以 决 定 应 用 程 序 能 访 问 的 帮 助。 例 如, 如 果 帮 助 名 为 MYHELP.HLP, 可 以 使 用 下 面 的 命 令 :SET HELP TO MYHELP.HLP
这 个 命 令 一 般 包 含 在 您 的 应 用 程 序 主 程 序 的 设 置 代 码 中。

(2) 为 希 望 提 供“ 上 下 文 相 关 帮 助” 的 对 象 指 定 一 个 帮 助 主 题。

1) 在“ 设 计” 状 态 下 打 开 想 为 之 指 定“ 上 下 文 相 关 帮 助” 的 对 象, 例 如 一 个 表 单、 控 件 或 工 具 栏。
2) 查 看 该 对 象 的 属 性。
3) 把 HelpContextID 属 性 设 置 为 代 表 帮 助 中 特 定 主 题 的 编 码。
3、“ 这 是 什 么 ?” 帮 助
“ 这 是 什 么 ?” 帮 助 类 似 于 上 下 文 相 关 帮 助, 因 为 它 提 供 对 当 前 具 有 焦 点 的 特 定 对 象 或 控 件 的 帮 助。 但“ 这 是 什 么 ?” 帮 助 并 不 激 活 帮 助 然 后 在 默 认 大 小 的“ 帮 助” 窗 口 中 显 示 帮 助 主 题, 而 是 在 一 个 弹 出 式 小 窗 口 显 示 帮 助 主 题, 当 用 户 在 屏 幕 任 意 位 置 单 击 时 该 窗 口 消 失。
“ 这 是 什 么 ?” 帮 助 在 提 供 简 单 提 示 型 描 述 或 特 定 控 件 定 义 时 很 有 用, 因 为“ 这 是 什 么 ?” 帮 助 主 题 简 洁、 准 确, 窗 口 不 会 变 得 过 大 从 而 掩 盖 您 正 描 述 的 特 性。

要 把“ 这 是 什 么 ?” 帮 助 与 特 定 表 单、 表 单 控 件 或 工 具 栏 关 联 起 来, 把 它 们 的hatsThisHelpID 属 性 设 置 为 代 表 帮 助 特 定 主 题 的 编 码。
使 用 如 表2 所 示 的 属 性 可 实 现“ 这 是 什 么 ?” 帮 助 功 能。
表2 “ 这 是 什 么 ?” 帮 助 功 能 的 属 性 及 其 说 明
属 性    说 明

WhatsThisHelp    设 置 表 单 的 该 属 性 为 真, 可 以 启 用 表 单 以 及 表 单 上 任 意 控 件 的“ 这 是 什 么 ?” 帮 助。

WhatsThisButton    如 果 希 望 表 单 的 标 题 栏 显 示 一 个“ 这 是 什 么 ?” 按 钮, 设 置 属 性 为 真。

WhatsThisHelpID    对 一 个 表 单、 控 件 或 工 具 栏, 把 该 属 性 设 置 为 对 应 于 帮 助 中 某 个 主 题 的 ID 编 码。

WhatsThisMode    使 用 这 个 方 法 程 序 可 以 显 示“ 这 是 什 么 ?” 帮 助 问 号 鼠 标 指 针 并 启 动“ 这 是 什 么” 帮 助 模 式。 单 击 一 个 对 象 将 显 示 该 对 象

WhatsThisHelpID 属 性 指 定 的 帮 助 主 题。
若 要 实 施“ 这 是 什 么 ?” 帮 助

1) 在 设 计 模 式 下 打 开 想 启 用“ 这 是 什 么 ?” 帮 助 的 表 单。

2) 把 表 单 的 WhatsThisHelp 属 性 设 置 为“ 真”(.T.)。

3) 要 在 表 单 标 题 中 显 示 一 个“ 这 是 什 么” 帮 助 按 钮, 把 表 单 的 WhatsThisButton 属 性 设 置 为“ 真(.T.)”。

4) 要 把 一 个“ 这 是 什 么” 帮 助 主 题 与 该 表 单 关 联 起 来, 把 表 单 的 WhatsThisHelpID 属 性 设 置 为 与 帮 助 中 主 题 相 对 应 的 ID 编 码。

5) 要 把 一 个“ 这 是 什 么” 帮 助 主 题 与 表 单 上 特 定 控 件 关 联 在 一 起, 选 择 控 件 然 后 把 它 的 WhatsThisHelpID 属 性 设 置 为 与 帮 助 中 主 题 相 对 应 的 ID 编 码。

4、 使 用 WinHelp 函 数
通 过 编 程 来 使 用 帮 助 的 另 一 个 方 法 是 调 用 WinHelp 函 数。WinHelp 函 数 是Windows 应 用 程 序 编 程 接 口 (API) 的 一 部 分。WinHelp 函 数 仅 能 用 于 Windows 平 台。
使 用 WinHelp 函 数 步 骤 如 下 :

(1)    定 义 您 的 应 用 程 序 将 要 传 递 的 命 令 参 数。
有 关 这 些 参 数 的 说 明, 请 参 阅 稍 后 的wCmd 参 数。

(2)    用 SET LIBRARY TO 设 置 库 并 定 义 要 使 用 的 变 量, 这 个 工 作 一 般 在 应 用 程 序 主 文 件 的 初 始 化 代 码 中 完 成。
SET LIBRARY TO SYS(2004) + “FOXTOOLS.FLL” ADDITIVE
Help = RegFn(“Help”, ”LCIC”, ”I”)
库 一 定 要 设 置 成 FOXTOOLS.FLL。SYS(2004) 返 回 安 装 FOXTOOLS.FLL 的 Visual FoxPro 根 目 录。

如 果 希 望 传 送 K 关 键 字 来 打 开 一 个 帮 助 主 题, 用 RegFn( ) 定 义 一 个 变 量, 象 上 一 示 例 中 的 Help 变 量。 如 果 希 望 打 开 映 射 到 一 个 编 码 的 帮 助 主 题, 用 RegFn 定 义 一 个 象 上 面 示 例 Help 一 样 的 变 量, 用 一 个 编 码 代 替 dwData 中 的 字 符 串。 如 果 传 递 编 码, 必 须 在 .HPJ 文 件 的 [MAP] 节 中 把 它 们 与 唯 一 的 用 编 码 标 记 (#) 注 脚 定 义 的 上 下 文 字 符 串 映 射 起 来。

(3)    使 用 CallFn( ) 调 用 函 数
下 列 代 码 使 用 CallFn() 打 开 帮 助 主 题, 该 代 码 包 含 主 题 关 键 字。
#define HELP_KEY 0x0101
wCmd = HELP_KEY
cFilename = HOME() + ” Myprogram\Myhelp.hlp”
dwData = ”Add Menu Items at Run Time”
CallFn(Help, MainHWND(), cFileName, wCmd, dwData)

有 关 FoxTools 函 数 的 更 详 细 内 容, 请 参 阅 VFP\TOOLS 目 录 下 的 FOXTOOLS.HLP 文 件。

指 定 WinHelp 参 数。 下 列 参 数 指 定 了 WinHelp 函 数 的 选 项。

hWnd 参 数

hWnd 参 数 标 识 请 求 帮 助 的 窗 口。 帮 助 使 用 这 个 标 识 符 跟 踪 哪 一 个 应 用 程 序 请 求 过 帮 助。 在 Visual FoxPro 中,1 使 用 包 含 在 FOXTOOLS.FLL 库 中 的 MainHWND( ) 函 数 传 递 hWnd 参 数。

lpzFileName 参 数

lpzFileName 参 数 是 一 个 字 段 串, 指 定 包 含 所 需 主 题 的 帮 助 的 有 效 路 径 及 文 件 名 称。 它 是 以 值 传 递 方 式 传 递 的。

wCmd 参 数

wCmd 参 数 或 者 指 定 用 户 对 特 定 主 题 定 位 的 查 找 类 型 或 者 指 明 应 用 程 序 不 再 需 要 帮 助。 它 可 以 设 置 为 表3 中 的 任 一 值。

表3 wCmd 参 数 的 设 置 及 其 含 义

常 量    值    意 义

HELP_FINDER    0x000B    显 示 “ 帮 助 查 找 器” 窗 口。
HELP_CONTEXT 0x0001    显 示 由 上 下 文 编 码 标 识 的 特 定 主 题 的 帮 助。
HELP_HELPONHELP    0x0004    装 载 HELP.HLP 并 显 示“ 使 用HELP 帮 助” 索 引 主 题。
HELP_INDEX    0x0003    显 示“ 帮 助 项 目” 文 件 (.HPJ) 中 的 [OPTIONS] 一 节 定 义 的 主 帮 助 索 引 主 题。
HELP_KEY    0x0101    显 示 在 关 键 字 列 表 中 发 现 的 第 一 个 与 dwData 参 数 指 定 的 关 键 字 相 对 应 的 主 题。

HELP_QUIT    0x0002     通 知 帮 助 应 用 程 序 已 不 再 需 要 帮 助,Windows 将 关 闭 帮 助 应 用 程 序。

HELP_SETINDEX 0x0005    把 特 定 主 题 设 置 为 索 引 主 题。

dwData 参 数

dwData 参 数 代 表 应 用 程 序 需 要 查 找 的 主 题。 它 的 内 容 和 格 式 取 决 于 应 用 程 序 调 用 WinHelp 函 数 时 所 传 递 的 wCmd 值。

在 大 多 数 调 用 帮 助 时 按 值 传 递 方 式 传 递 dwData 参 数, 这 是 Visual FoxPro 的 默 认 设 置。

根 据 环 境 设 置, 上 一 行 中 的 dwData 或 者 代 表 一 个 文 本 字 符 串, 指 示 要 查 找 的 关 键 字, 或 者 是 一 个 数 值, 指 示 标 识 一 个 特 定 主 题 的 上 下 文 编 码。

表4 中 列 出 了 wCmd 每 个 值 所 对 应 dwData 的 格 式。

表4 wCmd 各 值 及 其 所 对 应 的 dwData 格 式。
wCmd 值    dwData 格 式

HELP_CONTEXT    包 含 主 题 上 下 文 编 码 的 数 值。 HELP_CONTEXT 使 用 -1 可 以 代 替 使 用 HELP_INDEX 。
HELP_HELPONHELP    忽 略。
HELP_INDEX    忽 略。
HELP_KEY    指 向 一 个 字 符 串 的 长 指 针, 字 符 串 包 含 所 需 主 题 的 关 键 字。
HELP_QUIT    忽 略。
HELP_SETINDEX    包 含 要 设 置 为 索 引 主 题 的 上 下 文 编 码 的 数 值。

因 为 WinHelp 可 以 指 定 一 个 上 下 文 编 码 或 关 键 字, 所 它 可 以 支 持“ 上 下 文 相 关 帮 助” 及 对 帮 助 中 主 题 的 查 找。

说 明 : 如 果 帮 助 包 含 两 个 以 上 的 索 引, 应 用 程 序 必 须 指 定 其 中 一 个 为 默 认 索 引。 要 确 保 设 置 的 是 正 确 的 索 引, 应 用 程 序 在 调 用 帮 助 时, 应 该 把 wCmd 设 置 为 HELP-SETINDEX( 其 中 dwData 指 定 相 应 的 上 下 文 标 识)。 对 帮 助 的 每 次 调 用 都 要 后 接 HELP_CONTEXT 的 命 令 设 置。 千 万 不 要 把 HELP_SETINDEX 与 HELP_INDEX 一 起 使 用。

(5) 保 留 F1 键 的 功 能。

当 用 户 在 应 用 程 序 中 按 F1 键 时,Visual FoxPro 会 显 示 一 个“ 上 下 文 相 关 帮 助” 主 题。 为 了 做 到 这 一 点, 可 在 帮 助 表 中 为 需 要“ 上 下 文 相 关 帮 助” 的 主 题 指 定 一 个 帮 助 相 关 ID, 并 把 此 值 赋 给 表 单 或 控 件 的 HelpContextID 属 性。 当 表 单 或 控 件 获 得 焦 点 并 且 用 户 按 F1 键 时,Visual FoxPro 就 会 显 示 该 主 题。

(6〕 在 表 单 中 包 含“ 帮 助” 按 钮。

如 果 在 您 的 表 单 中 添 加“ 帮 助” 按 钮, 用 户 可 以 更 方 便 地 访 问 帮 助 信 息。 如 果 您 的 用 户 是 个 新 手, 那 么 更 应 该 考 虑 添 加 一 个“ 帮 助” 按 钮。
若 要 设 置 上 下 文 相 关 帮 助 并 添 加 一 个“ 帮 助” 按 钮

1) 在 表 单 的 Init 事 件 中, 将 表 单 中 所 有 对 象 的 HelpContextID 属 性 都 设 置 为 该 帮 助 主 题 的 ID 值。 例 如, 如 果 该 值 为 7, 可 用 如 下 命 令 :
THIS.SetAll(”HelpContextID”,7)

2) 在 表 单 中 添 加 一 个 命 令 按 钮。

3) 把 命 令 按 钮 的 Caption 属 性 设 置 为“ 帮 助”。

4) 在 命 令 按 钮 的 Click 事 件 中, 添 加 下 面 的 命 令 :HELP ID THIS.HelpContextID

为 了 方 便, 可 把“ 帮 助” 按 钮 保 存 为 一 个 类, 这 样 就 可 以 方 便 地 把 它 添 加 到 任 何 表 单 中。

(7) 退 出 图 形 样 式 帮 助。

帮 助 应 用 程 序 是 所 有 Windows 应 用 程 序 共 享 的 资 源。 因 为 它 也 是 一 个 独 立 的 应 用 程 序, 所 以 用 户 可 以 象 其 他 应 用 程 序 一 样 执 行 它。 这 样 您 的 应 用 程 序 对 帮 助 应 用 程 序 只 有 有 限 的 控 制 能 力。
尽 管 您 的 应 用 程 序 不 能 直 接 关 闭 帮 助 应 用 程 序 窗 口, 但 它 可 以 通 知 帮 助 应 用 程 序 它 不 再 需 要 帮 助。 在 关 闭 主 窗 口 之 前, 您 的 应 用 程 序 应 该 把 wCmd 参 数 设 置 为 HELP_QUIT, 以 此 通 知 帮 助 说 明 您 的 应 用 程 序 不 再 需 要 它 了。

如 果 应 用 程 序 在 执 行 过 程 的 某 个 位 置 要 调 用 帮 助, 那 么 在 终 止 应 用 程 序 前, 必 须 把 wCmd 参 数 设 置 为 HELP_QUIT 来 调 用 帮 助。

如 果 一 个 应 用 程 序 打 开 了 一 个 以 上 的 帮 助, 它 必 须 为 每 一 个 帮 助 文 件 调 用 WinHelp 函 数 退 出 其 帮 助 应 用 程 序。 如 果 一 个 应 用 程 序 或 动 态 链 接 库 (DLL) 已 经 打 开 了 一 个 帮 助 但 不 希 望 帮 助 应 用 程 序 的 相 关 实 例 保 持 活 动, 那 么 这 个 应 用 程 序 或 DLL 应 该 把 wCmd 参 数 设 置 为 HELP_QUIT 来 调 用 帮 助, 这 样 可 以 退 出 帮 助 应 用 程 序 的 那 个 实 例。

说 明 : 在 终 止 之 前, 一 个 应 用 程 序 或 DLL 总 是 应 该 对 任 何 一 个 打 开 的 帮 助 调 用 帮 助。 使 用 帮 助 名 任 何 一 次 调 用 帮 助 都 会 打 开 相 应 的 帮 助。
所 有 调 用 帮 助 的 窗 口 相 继 把 wCmd 设 置 为 HELP_QUIT 调 用 帮 助 以 后, 帮 助 应 用 程 序 才 退 出。 如 果 一 个 应 用 程 序 没 有 这 么 做, 那 么 即 使 在 所 有 请 求 帮 助 的 应 用 程 序 都 终 止 以 后, 帮 助 应 用 程 序 仍 将 继 续 运 行。

以 上 介 绍 的 是 制 作Windows 95 帮 助 系 统 的 基 本 方 法。 事 实 上, 随 着 当 今“ 所 见 即 所 得” 设 计 思 想 的 广 泛 应 用, 出 现 许 多 专 门 用 于 制 作 帮 助 系 统 的 工 具 软 件, 如Software Interface 的Help Magician ;Blue Skies Software 的Robohelp95 ;Wextech System 的Doc_to_Help2.0 以 及Fore Front 的ForeHelp2.0 等 等。 它 们 最 大 的 特 点 是 可 视 化、 所 见 即 所 得、 集 成 处 理 等。 操 作 界 面 类 似 于WORD, 一 般 加 入 了 自 已 的 工 具 条、 菜 单 项, 实 现 可 视 化 设 计, 可 以 轻 松 地 创 建 跳 转 热 点、 弹 出 热 点、 图 形 热 点 等 等, 而 且 还 可 以 将 帮 助 文 件 打 印 成 册。