第 11 章 创 建 A c tiv e X 文 档 应 用 程 序
到 目 前 为 止 我 们 已 讨 论 了 各 种 新 技 术 包 括 A c tiv e X 和 CO M + 这 些 技术 允 诺 要 把 In te rn e t 变 成 每 个 人 的 业 务 工 具 使 用 A c t iv e X 的 方 式 多 种 多 样 CO M + 在 将 来 会 用 到 例 如 M ic ros oft 发 布 了 一 个 称 之 为 A c tiv e X
A c c e s s ib ility 的 A c tiv e X AP I 这 个 AP I 设 计 用 于 向 In te rn e t 添 加 那 些 已 添 加到 W in dow s 95 中 的 A c c e s s ib ility a p p le t 含 有 内 容 的 小 程 序 类 似 于 S tic ky K e y s一 种 每 次 按 一 个 键 而 不 是 同 时 按 住 所 有 键 的 方 式 来 创 建 CT R L 组 合 键 的 方
法 这 样 的 方 法 不 仅 出 现 于 W ind ow s 95 和 W ind ow s N T 4 .0 桌 面 系 统 而 且正 在 出 现 于 与 A c tiv e X 兼 容 的 In te rn e t 浏 览 器 中
还 有 其 它 一 些 由 M ic ros oft 和 其 它 公 司 开 发 的 基 于 A c tiv e X 的 技 术 已 经投 入 使 用 — — 这 样 的 技 术 实 在 太 多 了 这 里 难 以 一 一 罗 列 更 重 要 的 A c tiv e X 技 术 之 一 是 A c tiv e M o v ie 事 实 上 M S N B C In te rn e t 站 点 已 经 使 用 A c tiv e M o v ie 提 供 NB C 新 闻 网 络 的 新 闻 剪 辑 了 实 际 上 A c tiv e M o v ie 使 你 能 在 In te rn e t 上看 电 影 剪 辑 放 映 AVI 和 其 它 种 类 的 电 影 文 件
注 ActiveX 提 供 了 把 令 人 激 动 的 新 技 术 从 桌 面 系 统 转 移 到 Internet 的 手段
WE B 链 接 刚 才 讨 论 的 新 技 术 可 以 查 到 更 多 的 可 用 信 息 可 以 在ht tp :/ /w ww .m ic ro so ft
.com /enable/dev/msdn4.ht m 中 找 到 ActiveX Accessibility ActiveMovi e 控 件 的 使 用 说 明 和 技 术 手 册 出 现 在http://www .microsoft.
com/msdn/s dk/inetsdk/help/comp lib/activemovie.htm 中
最 重 要 的 A c tiv e X 技 术 并 不 是 新 颖 而 令 人 激 动 的 技 术 而 是 涉 及 到 一 个 老生 常 谈 的 问 题 即 在 In te rn e t 上 共 享 文 档 因 为 接 口 是 静 态 的 这 确 实 一 直 是 一个 大 问 题 读 过 第 8 章 后 考 虑 一 下 为 了 创 建 任 意 种 类 的 动 态 接 口 所 需 的 程 序复 杂 度 和 所 需 的 标 记 数 量 就 会 认 识 到 这 一 点 是 的 你 能 把 字 处 理 文 档 结 合一 些 现 实 的 数 据 嵌 入 到 HT M L 但 是 数 据 并 未 变 化 用 户 还 是 难 于 编 辑 它 对于 电 子 表 格 也 是 一 样 显 示 数 据 一 般 说 来 并 不 太 难 只 要 你 肯 于 牺 牲 最 新 信 息A c tiv e X 提 供 了 解 决 办 法 它 允 许 你 创 建 动 态 文 档 你 可 以 编 辑 它 并 且 看 到 它的 实 时 变 化
那 么 这 一 技 术 是 从 什 么 地 方 神 秘 地 冒 出 来 的 呢 其 实 它 一 点 也 不 新 颖
M ic ros oft 只 不 过 简 单 地 修 改 了 M icro s o f t O f f ice 中 的 技 术 而 已 A c t iv e X D o c u m e n t 原 来 的 名 称 为 OL E D o c u m e n t O b je c ts 文 档 对 象 大 多 数 人 包 括M ic ros oft 的 人 已 把 A c tiv e X D o c u m e n t 简 记 为 A c tiv e D oc um e n t 本 书 中 我 们 将一 直 使 用 这 个 术 语 原 因 在 于 它 既 清 楚 又 简 单 它 是 M ic ros oft O f f ic e B ind e r 技术 的 一 部 分 从 未 打 算 成 为 一 个 公 开 的 规 范 最 初 甚 至 在 能 得 到 O LE D o c u m e n t O b jects 规 范 之 前 必 须 申 请 O ffic e 兼 容 的 程 序 只 是 到 了 W ind ow s 95 出 现 之
后 这 一 规 范 才 成 为 每 个 人 都 能 得 到 的 东 西 有 迹 象 表 明 M ic ros oft 会 把 这 一规 范 公 开 的 原 因 在 于 它 是 OL E 演 变 中 的 下 一 个 逻 辑 步 骤
本 章 的 中 心 内 容 是 A c tiv e D oc um e n t 我 们 要 考 察 一 下 除 了 数 据 应 用 之 外什 么 是 A c tiv e X 的 最 重 要 的 用 途 另 外 你 还 将 看 到 创 建 浏 览 器 使 用 的A c tiv e XD o c u m e n t 是 多 么 容 易 另 外 本 章 还 将 介 绍 一 下 创 建 你 自 己 的 定 制 文档 的 一 些 设 置 时 你 需 要 做 些 什 么 工 作
注 你 可 能 会 听 到 有 人 将 ActiveX 文 档 称 为 O L E 文 档 对 象 另 外 有 些 人 将它 们 称 为 ActiveDocu ment 文 档
本 章 将 介 绍 三 个 主 要 的 A c tiv e D oc um e n t 主 题 首 先 让 我 们 看 一 下 W e b P ub lis h in g W iz a rd 如 果 你 不 了 解 从 用 户 角 度 看 A c tiv e D oc um e n t 是 如 何 工 作 的那 么 你 应 该 密 切 关 注 这 一 节 的 内 容 了 总 而 言 之 怎 么 能 期 望 写 出 你 自 己 都 不理 解 的 应 用 程 序 呢 ? 接 下 来 我 们 考 察 一 下 A c tiv e D oc um e n t 的 理 论 基 础 最 重 要的 是 你 要 实 现 的 接 口 最 后 我 们 创 建 一 个 简 单 程 序 它 实 现 了 A c tiv eD o c u m en t 所 需 的 接 口
注 释 本 章 的 例 子 全 部 采 用 Visual C++ 6.0 但 是 除 了 一 些 小 的 程 序 性变 动 之 外 也 可 以 容 易 地 使 用 4.2 以 上 版 本 的 Visual C++ 代 码 本身 应 该 工 作 的 一 样 好 你 必 须 拥 有 Visual C++ 的 某 种 版 本 推 荐 6. 0 版 以 便 于 从 头 至 尾 地 学 习 本 章 的 例 子 也 可 用 Visual C++4.1 来 学 习 这 些 例 子 但 你 在 工 作 中 却 要 尽 量 少 用 为 好 例 如 可 能 需 要添 加 对 Visual C++ 4.2 以 上 版 本 作 为 缺 省 支 持 的 各 种 新 类 的 引 用 另外 创 建 例 子 时 也 不 如 使 用 新 一 些 的 产 品 那 样 自 动 化 程 度 高 一 些
理 论 上 使 用 Visual C++ 4.0 创 建 这 些 例 子 也 可 以 但 所 需 的 工 作 量很 大 无 疑 使 用 该 编 译 器 的 升 级 版 显 得 更 容 易 些
11 . 1 什 么 是 Ac ti ve Do cum en t OL E 文 档 对 象
到 现 在 为 止 对 于 用 户 在 In te rn e t 比 较 熟 悉 的 文 档 种 类 我 们 还 没 有 进 行 太多 的 讨 论 例 如 用 户 非 常 熟 悉 刚 在 本 地 硬 盘 上 修 改 过 的 W o rd 文 档 但 他 们在 In te rn e t 上 使 用 真 正 干 练 的 A c t iv e X 控 件 却 是 不 完 全 熟 悉 的 对 于 使 用 只 有 程序 员 喜 欢 的 方 式 来 显 示 专 用 页 元 素 的 脚 本 语 言 我 们 也 要 讨 论 用 户 大 概 不 会全 都 对 创 建 J a va S c r ipt 的 最 新 技 术 感 兴 趣 当 然 这 就 会 带 来 差 不 多 每 个 人都 会 问 到 的 问 题 对 于 用 户 而 言 除 了 一 点 点 信 息 几 个 窗 体 以 及 那 眼 花 缭 乱的 A c tiv e X 控 件 In te rn e t 到 底 是 个 什 么 玩 艺 儿 ? 那 么 A c t iv e D o c u m e n t 为 你 提供 一 个 答 案 它 们 是 对 每 个 人 说 来 都 可 用 的 在 W e b 页 上 创 建 内 容 并 显 示 数 据 的一 种 手 段
但 是 A c tiv e D oc um e n t 却 远 远 不 止 是 共 享 信 息 的 一 种 方 式 你 可 以 使 用 它们 正 儿 八 经 的 干 点 事 考 虑 一 下 这 种 场 景 吧 你 的 公 司 拥 有 自 己 的 内 部 网 公司 的 雇 员 们 需 要 时 可 以 在 世 界 上 任 何 地 方 进 入 这 个 网 他 们 使 用 这 个 网 获 得 自己 的 e- m a i l 并 完 成 各 种 各 样 的 其 它 任 务 现 在 你 的 老 板 告 诉 你 要 求 市 场 开 发部 提 交 报 告 而 这 时 大 部 分 销 售 代 表 都 在 外 工 作 着 你 怎 么 样 才 能 完 成 这 一 工作 呢 ?
注 释 Netscape Navigator 和 早 期 版 本 的 Internet E xplorer 通 过 使 用帮 手 (helpers) 让 你 看 到 非 标 准 文 档 浏 览 器 启 动 应 用 程 序 的 一 个 完整 拷 贝 并 把 W e b 站 点 上 的 文 件 内 容 传 递 给 它 这 种 办 法 的 问 题 是启 动 另 一 个 应 用 会 使 用 更 多 的 内 存 而 且 你 与 Internet 服 务 器 也 没有 现 场 连 接 所 以 对 文 件 所 作 的 改 变 不 会 立 即 反 映 到 服 务 器 中 去 尽管 Microsoft 在 Internet E xplorer3.0 及 以 上 版 本 中 仍 然 使 用 帮手 (helpers) 一 词 但 从 用 户 的 观 点 来 看 两 者 的 意 义 却 是 完 全 不 同的
在 这 种 情 况 下 A c tiv e D oc um e n t 就 是 答 案 使 用 第 8 章 中 讨 论 过 的 标 记 在 HT M L 文 档 中 建 立 到 该 文 档 的 链 接 当 用 户 单 击 文 档 引 用 时 他 们 在 浏 览 器中 看 到 的 是 文 档 的 可 编 辑 版 本 这 个 浏 览 器 的 菜 单 和 工 具 栏 发 生 了 一 些 变 化
图 11 .1 中 显 示 的 是 在 In te rn e t E x p lo re r 浏 览 器 窗 口 中 显 示 的 W o rd fo r W indow s
文 档 请 注 意 浏 览 器 所 有 特 色 仍 然 完 整 无 损 变 化 了 的 只 是 文 档 显 示 的 方 式这 种 特 定 技 术 并 不 是 什 么 新 货 色 它 被 称 之 为 在 位 编 辑 ( in - p lace ed itin g ) 大 多
数 O LE2 服 务 器 现 在 都 能 向 O LE2 客 户 机 提 供 这 种 功 能 你 可 以 试 一 下 W o rd fo r W ind ow s 或 C o re DR AW 单 击 OL E 对 象 时 菜 单 和 工 具 栏 会 随 时 改 变 得 与 客户 机 上 的 菜 单 和 工 具 栏 匹 配 最 大 的 差 别 在 于 这 是 跨 越 In te rn e t 连 接 在 浏 览 器中 正 在 发 生 的 事
注 ActiveDocu ment 使 用 称 之 为 在 位 (inplace)编 辑 的 OLE2 特 色 它 让 你在 客 户 端 中 编 辑 文 档 而 不 是 作 为 一 个 独 立 的 服 务 器 进 行 编 辑
图 11 .1 In te rn e t E x plo re r 4. 0 显示 了在 位 ( in - p lace) 编辑 的效 果 这是 CO M 的 OL E 2 特色
注 释 如 果 在 基 于 L A N 的 Internet 服 务 器 上 测 试 这 个 示 例 的 话 可 能 会 出现 一 个 对 话 框 问 你 是 否 想 打 开 或 保 存 文 件 多 数 情 况 下 在 一 个 现场 (live)Inte rnet 连 接 的 连 接 中 测 试 时 肯 定 会 出 现 这 个 对 话 框 取决 于 你 是 如 何 设 置 浏 览 器 安 全 性 的 简 单 打 开 文 件 就 会 看 到 如 图
11.1 所 示 的 效 果
你 还 会 注 意 到 另 外 一 个 差 别 如 果 改 变 了 这 个 文 本 的 内 容 然 后 在 In te rn e t E xp lo re r 浏 览 器 工 具 栏 上 单 击 B ack 按 钮 就 会 看 到 如 下 图 所 示 的 对 话 框 它 询问 你 是 否 想 改 变 文 件 如 果 单 击 Y e s 就 会 看 到 典 型 的 F ile S a v e 保 存 文 件 对 话 框 遗 憾 的 是 使 用 这 一 技 术 保 存 文 件 将 把 文 件 保 存 到 你 的 本 地 硬 盘 中 —
— 在 我 们 这 里 这 项 特 性 没 有 什 么 用 处 但 也 许 在 别 的 地 方 有 用 还 有 其 它 保 存文 件 的 方 法 可 以 使 用 F ile 文 件 |S a v e 另 存 为 命 令 你 还 能 够 使 用 F ile文 件 |S e nd T o 发 往 | W e b P ub lis h ing W iz a rd 发 布 向 导 命 令 真 正 地 将
文 件 送 回 W e b 服 务 器 这 正 是 我 们 所 要 的 In te rn e t E xp lore r 与 W ind ow s 的某 种 组 合 不 提 供 F ile |S e nd T o |W e b P ub lis h ing W iz a rd 命 令 这 就 是 说 必 须 先 把文 件 存 在 本 地 硬 盘 然 后 再 用 W e b P ub lis h ing W iz a rd 命 令 将 它 发 往 W e b 服 务器 本 章 后 面 一 节 使 用 W e b P ub lis h in g W iz a rd 中 将 讨 论 使 用 W e b P u b lis h ing W iz a rd 所 需 的 步 骤
技 巧 对 某 些 情 况 来 说 本 节 讨 论 的 每 种 技 术 的 帮 助 都 不 太 大 例 如 你可 能 想 向 W e b 服 务 器 邮 寄 文 档 而 且 希 望 每 个 邮 件 单 独 到 达 这 时你 会 告 诉 用 户 使 用 File|SendT o|Mail Recipient 邮 件 收 件 人 命
令 |
显 然 |
这 就 意 味 着 你 需 要 整 理 所 有 收 到 的 文 档 |
但 是 |
当 其 它 方 |
---|---|---|---|---|
法 无 |
效 时 |
这 种 方 法 却 能 够 使 用 |
技 巧 当 前 的 HTTP1.0 规 范 不 允 许 用 户 向 W W W 服 务 器 发 布 文 档 新 的 HTTP1.1 规 范 修 正 了 这 一 点 如 果 你 希 望 允 许 用 户 从 W e b 页 面 上 向 服 务 器 发 布文 档 就 应 提 供 一 个 使 用 1 . 1 规 范 的 服 务 器 因 为 不 必 编 写 通 常 的 脚本 或 者 在 连 接 中 跳 来 跳 去 所 以 你 不 仅 可 以 节 省 时 间 和 精 力 而 且可 以 减 少 电 话 支 持 数 量 从 而 对 用 户 而 言 事 情 也 就 更 简 单 了
Netscape 和 Microsoft 产 品 的 所 有 当 前 版 本 都 支 持 该 1 . 1 规 范如 果 你 拥 有 任 一 家 供 货 商 产 品 的 老 版 本 可 以 查 看 一 下 自 己 的 文 档
A c tiv e XD o c u m e n t 的 变 化 也 使 得 程 序 员 必 须 考 虑 对 OL E 的 支 持 在 客 户 机有 三 级 对 象 参 与 对 象 可 以 简 单 地 出 现 在 查 看 区 也 可 以 占 据 整 个 窗 口 还 可以 占 据 整 个 应 用 框 架 现 在 来 比 较 一 下 这 三 级 对 象 的 不 同 之 处
以 前 你 可 以 创 建 一 个 对 象 并 将 它 放 在 容 器 中 O LE1 出 现 后 容 器 只 是 简单 地 显 示 一 个 图 标 说 明 对 象 的 存 在 如 果 希 望 编 辑 对 象 可 以 双 击 容 器 中 的对 象 图 标 W ind ow s 将 在 另 一 个 窗 口 中 形 成 该 文 档 的 完 整 拷 贝 这 正 是 某 些 人所 说 的 对 象 简 单 地 出 现 在 浏 览 区 的 意 思
O LE2 改 变 了 客 户 机 和 服 务 器 交 互 的 方 式 现 在 你 可 以 真 正 看 到 对 象 的 内容 了 例 如 如 果 在 字 处 理 文 档 中 放 入 一 个 电 子 表 格 对 象 不 必 双 击 该 对 象 就能 看 到 它 的 内 容 它 就 是 窗 口 级 的 参 与 者 客 户 机 和 服 务 器 共 享 窗 口 客 户 机显 示 它 的 数 据 然 后 依 靠 服 务 器 显 示 对 象 内 部 信 息 O LE2 还 提 供 了 在 位 替 换操 作 大 部 分 情 况 下 双 击 对 象 都 会 启 动 一 个 进 程 之 外 的 ( ou t- o f - p roc e s s ) 服 务 程序 它 占 据 整 个 客 户 机 框 架 服 务 器 占 据 了 一 般 留 作 客 户 机 使 用 的 菜 单 和 工 具栏 从 用 户 角 度 来 看 应 用 程 序 是 一 样 的 只 是 改 变 了 工 具 以 满 足 用 户 编 辑对 象 的 需 求
注 当 你 创 建 了 一 个 与 外 部 文 档 的 连 接 时 OLE1 只 是 显 示 一 个 图 标 OLE2 则 显 示 真 正 的 文 档 内 容 并 允 许 进 行 在 位 编 辑
通 过 使 用 浏 览 器 A c tiv e D oc um e n t 将 该 技 术 从 桌 面 系 统 扩 展 到 了 In te rn e t 上现 在 浏 览 器 工 具 将 会 自 动 更 新 以 适 应 用 户 的 需 要 用 户 不 必 再 打 开 一 个 其 它的 程 序 来 编 辑 文 档 一 个 进 程 之 外 的 服 务 程 序 将 负 责 更 新 浏 览 器 菜 单 和 工 具 栏以 适 应 应 用 程 序 的 一 般 需 要 实 际 上 W ind ow s 的 未 来 版 本 将 会 做 得 更 好
注 当 你 单 击 窗 口 应 用 程 序 中 的 对 象 时 进 程 外 的 服 务 程 序 实 现 你 看 到 的菜 单 和 工 具 栏 的 修 改
W ind ow s 95 和 W ind ow s N T 4 .0 使 用 的 都 是 资 源 管 理 器 式 界 面 如 果 你 用 右键 单 击 与 某 个 已 注 册 的 应 用 程 序 相 关 的 文 档 就 能 看 到 一 个 有 多 种 选 项 的 菜 单最 常 见 的 选 项 是 打 开 或 打 印 文 档 大 部 分 情 况 下 你 能 看 到 使 用 Q u ic k V ie w 实 用程 序 浏 览 文 档 内 容 的 选 项
用 户 界 面 在 不 久 的 将 来 也 可 能 有 所 改 变 双 击 文 档 能 进 行 在 位 操 作 服 务器 将 真 正 接 管 E xp lo re r 的 菜 单 和 工 具 栏 用 户 再 也 不 必 离 开 Ex p lo re r 去 打 开 另外 一 个 应 用 程 序 窗 口 另 外 In te rn e t 站 点 就 像 硬 盘 一 样 出 现 在 Ex p lo re r 中 并组 合 了 目 前 的 浏 览 器 的 功 能
程 序 员 们 很 欢 迎 这 些 变 化 吗 ? 并 不 全 是 有 些 人 已 经 在 抱 怨 该 技 术 只 是 加强 了 M ic ros oft 对 计 算 机 世 界 的 控 制 当 然 只 有 在 你 不 能 安 装 另 一 个 服 务 器来 替 代 In te rn e t E x p lo re r 时 才 会 发 生 这 种 情 况 — — 这 几 乎 是 不 可 能 的 事 随 着 计算 技 术 日 趋 成 熟 A c tiv eD o c u m en t 将 会 成 为 一 种 特 别 重 要 的 技 术 这 也 正 是 本章 为 什 么 重 要 的 原 因 ─ ─ 本 章 的 目 的 正 是 使 你 跟 上 这 种 日 新 月 异 的 技 术 的 发展 以 便 你 可 以 使 用 它 来 满 足 目 前 的 计 算 需 求
创 建 连 接
现 在 你 已 经 了 解 了 使 用 A c tiv e D oc um e n t 的 结 果 并 讨 论 了 该 技 术 为 什 么重 要 的 原 因 本 节 将 介 绍 实 现 它 的 HT M L 代 码 程 序 列 表 11 .1 显 示 了 用 于 创 建该 示 例 的 代 码 这 个 示 例 虽 然 很 短 但 很 实 用 它 没 有 增 加 任 何 特 别 功 能 从 而
使 你 可 以 看 到 创 建 A c tiv e X 文 档 链 接 的 最 小 需 求 可 以 看 出 代 码 中 只 是 使 用了 一 个 简 单 的 链 接 所 有 该 应 用 程 序 后 面 的 魔 法 都 存 在 于 In te rn e t E xp lore r 中 第 8 章 已 经 用 这 种 链 接 来 显 示 W e b 站 点 上 的 其 它 页 了
程 序 列 表 11.1
<H T M L >
<H E A D >
<T IT L E >A c t iv e X D o c u m e n t< / T IT L E >
< B ODY>
< C EN TE R >
< H 2 > A c t iv e X Do c u m e n t T e s t P a g e < H 2 >
< E M > R e qu ire s M ic ros o f t W o rd or W o rd P a d < / E M > < P >
< / C e n te r>
< A H R E F = " h ttp ://n t_ s e rv e r/file s / T e s t D o c .D o c " > T e s t D o c u m e n t< / A >
< / B ODY>
< / H T M L >
好 了 现 在 浏 览 器 中 已 经 有 了 一 个 可 以 编 辑 的 文 档 了 这 确 实 不 是 一 件 特别 困 难 的 事 情 由 于 文 档 仍 在 浏 览 器 中 所 以 可 以 节 省 内 存 只 有 一 个 应 用 程序 处 于 运 行 状 态 所 以 尽 管 实 际 中 要 花 费 一 些 额 外 的 处 理 时 间 和 内 存 来 浏 览 及处 理 文 档 但 比 起 运 行 两 个 应 用 程 序 来 说 这 样 做 的 花 费 要 少 得 多 例 如 在位 激 活 功 能 这 一 特 色 就 是 使 用 进 程 外 服 务 程 序 的 结 果 进 程 外 服 务 程 序 实 际 上
是 D LL 的 一 种 漂 亮 的 形 式 它 能 提 供 与 客 户 机 应 用 程 序 进 行 通 讯 的 适 宜接 口 关 键 在 于 D LL 比 完 整 的 应 用 程 序 占 用 的 内 存 要 少 得 多 并 且 也 没 有 理由 担 心 什 么 显 示 问 题 这 是 客 户 机 的 工 作 本 章 A c tiv e D oc um e n t 结 构 概 述一 节 将 介 绍 这 种 DL L 的 一 些 需 求 情 况
注 ActiveDocu ment 使 用 进 程 外 服 务 程 序 通 常 是 一 个 DLL 来 实 施 在 位编 辑
还 有 两 种 其 它 的 方 法 可 以 创 建 A c tiv e D oc um e n t 连 接 不 过 本 章 将 不 用 多 少时 间 来 讨 论 这 些 方 法 M ic ros oft W e b B row s e r C on tro l 允 许 你 浏 览 In te rn e t 上 任意 类 型 的 文 档 包 括 那 些 一 般 与 In te rn e t 并 无 关 系 的 文 档 如 W o rd fo r W indow s 文 档 另 外 在 这 方 面 还 有 一 些 高 级 的 <O B J E C T > 标 记 属 性 能 提 供 很 大 帮 助
你 可 能 要 花 费 一 些 时 间 去 了 解 第 8 章 中 有 关 <O B J E C T > 标 记 的 知 识 然 后 就 可以 到 所 列 的 W e b 站 点 上 去 下 载 有 关 的 技 术 规 范 实 际 上 <O B J E C T > 标 记 的 高 级属 性 目 前 正 处 于 不 断 发 展 变 化 中 这 也 正 是 本 章 不 作 介 绍 的 原 因
使 用 Web Publis hing Wizard
你 不 必 依 赖 那 些 老 方 法 来 保 持 文 档 为 最 新 状 态 利 用 W e b P ub lis h ing W iz a rd 只 要 稍 作 努 力 就 能 使 W e b 服 务 器 上 的 文 档 保 持 最 新 状 态 现 在 对 文 档的 更 改 将 不 会 像 原 来 的 浏 览 器 技 术 那 样 只 出 现 在 自 己 的 本 地 机 器 上 实 际 上 它们 会 出 现 在 In te rn e t 服 务 器 上 由 于 提 供 了 使 用 W e b P ub lis h ing W iz a rd 以 及可 能 的 高 级 的 设 置 连 接 信 息 的 已 经 编 写 好 的 过 程 因 此 就 可 以 允 许 雇 员 从甚 至 很 远 的 地 方 对 HT M L 页 进 行 修 改 了
Web 链 接 学 习 本 章 的 这 一 节 时 你 需 要 有 一 份 Web Pu blishing Wizard 的 拷 贝 你 在 Explorer Send to 菜 单 上 应 该 能 够 看 到 Web Publishing Wizard 右 击 某 文 件 然 后 在 上 下 文 相 关 菜 单 中 查 找 另 外 如 果 你 在 浏 览 器 中 打 开 一 个 文 档 那 么 在 Word 的 File|Send To 菜 单 中 也 能 看 到 Web Publishing Wizard 项 但 正 常 打 开 Word 时 不 会 看 到 这 个 菜 单 项 你 可 以 从http://www .microsoft.com/windo ws/software/webpost/ default. htm 下 载 Web Pub lishing Wizard Windows 98 用 户 在 添 加 / 删 除 程序 属 性 对 话 框 的 Windows Se tup 标 签 中 可 能 会 发 现 Web Publishing Wizard 出 现 于 Internet 文 件 夹 中 Web Publis hing Wizard 也 是 作为 不 同 的 Internet 编 程 工 具 的 一 部 分 由 Microsoft 提 供 安 装 的 所以 在 安 装 之 前 应 看 看 Web Publis hing Wizard 是 否 可 用
那 么 怎 么 开 始 呢 ? 下 面 的 过 程 将 帮 助 你 进 行 第 一 次 的 实 践 第 一 次 尝 试之 后 你 可 以 将 它 们 总 结 为 简 单 的 四 步 过 程 一 旦 通 过 第 一 阶 段 后 我 们 将 看一 下 这 个 过 程 的 部 分 内 容 我 们 先 从 图 11 .1 所 示 的 文 档 起 步 并 且 假 定 该 文 档已 经 编 辑 过 了 现 在 要 做 的 是 将 所 做 的 修 改 保 存 到 In te rn e t 站 点 上 去
- 使
用 F ile |S av e A s 命 令 显 示 F ile S a v e 对 话 框 在 将 文 件 发 送 给 W e b 服务 器 之 前 必 须 先 在 本 地 机 上 保 存 它 可 能 以 后 M ic ros oft 会 修 改 这 个 过 程 但现 在 你 还 是 需 要 花 点 时 间 做 一 个 本 地 拷 贝 将 文 件 命 名 为 W e b 站 点 页 的 名 字
在 本 例 的 In te rn e t 站 点 中 文 件 名 为 T E S T DOC . D OC 如 图 11 .1 中 In te rn e t E xp lore r
的 标 题 栏 所 示
- 在
W o rd 或 W ind ow s E xp lore r 中 使 用 F i le |S e nd T o |W e b P ub lis h ing W iz a rd 命令 来 显 示 W e b P ub lis h ing W iz a rd 对 话 框 如 果 使 用 W indow s E xp lore r 发 送 它要 首 先 选 中 文 件 或 文 件 夹
- 单 击 N e x t 如 果 你 使 用 的 是 W e b P ub lis h ing W iz a rd 的
老 版 本 或 者 从 开 始 菜单 启 动 W e b P ub lis h in g W iz a rd 你 将 看 到 下 一 页 如 下 图 所 示 在 某 些 情 况 下W e b P ub lis h in g W iz a rd 将 自 动 把 一 个 缺 省 的 文 件 名 放 在 F ile 文 件 或 Fo ld e r 文件 夹 域 中 现 在 你 还 用 不 到 该 文 件 名 如 果 你 使 用 的 是 新 版 本 的 产 品那 么 在 启 动 W e b P u b lis h ing W iz a rd 之 前 就 要 选 择 一 个 文 件 你 就 会 看 到 一 个
对 话 框 询 问 你 将 使 用 哪 一 个 W e b 服 务 器 连 接 这 时 请 跳 过 第 5 步
-
单
击 B ro w s e F ile s 浏 览 文 件 按 钮 系 统 显 示 B ro w s e 对 话 框 它 的 外 观 与标 准 的 F ile O p e n 对 话 框 相 似 找 到 刚 才 保 存 的 文 档 的 本 地 拷 贝 然 后 单 击O p e n 现 在 就 能 在 F ile 文 件 或 Fo ld e r 文 件 夹 域 中 看 到 W e b 文 档 的 名 字了 单 击 N e x t
-
如
果 你 先 前 曾 定 义 了 W e b 服 务 器 连 接 就 能 看 到 一 个 包 含 着 连 接 名 称 的 下拉 式 列 表 框 你 可 以 选 择 其 中 之 一 或 者 单 击 N e w 按 钮 定 义 一 个 新 的 连 接该 例 中 假 定 需 要 一 个 新 连 接 如 果 确 实 不 需 要 新 连 接 可 以 选 择 已 有 的 一个 连 接 然 后 跳 到 第 14 步 无 论 你 单 击 了 N e w 按 钮 或 是 以 前 从 未 定 义 过 服 务
器 连 接 都 会 看 到 如 下 图 所 示 的 对 话 框 该 对 话 框 来 自 于 W e b P ub lis h in g W iz a rd 的 最 新 版 本 它 包 含 有 一 个 描 述 域 和 一 个 命 令 按 钮 而 老 版 本 有 两 个 域 该对 话 框 是 你 开 始 定 义 客 户 机 与 In te rn e t 服 务 器 之 间 连 接 的 地 方 幸 运 的 是 这 些工 作 只 要 做 一 次 就 可 以 了
注 释 老 版 本 的 Web Publishing Wi zard 在 这 个 对 话 框 中 提 供 了 两 个 域第 一 个 是 连 接 名 第 二 个 是 创 建 的 连 接 类 型 可 在 Web Pu blishing Wizard 的 新 版 本 上 单 击 对 话 框 中 的 Advanced 按 钮 来 访 问 第 二 个 域
- 为
In te rn e t 连 接 输 入 一 个 名 字 在 绝 大 多 数 情 况 下 如 果 只 需 要 一 项 内 容 的
话 保 持 M y W e b S i te 不 变 就 可 以 了 从 第 二 个 列 表 框 中 选 择 In te rn e t S e rv ic e P rov ide r In te rn e t 服 务 供 应 者 W e b P ub lis h ing W iz a rd 的 最 新 版 的 用 户 需 要单 击 A dva nc e d 按 钮 如 果 是 为 一 个 LA N 内 部 网 站 点 建 立 连 接 那 么 当 使用 老 版 本 的 W e b P ub lis h ing W iz a rd 时 可 以 选 择 O th e r In te rn e t P ro v id e r 选项 或 者 在 使 用 新 版 的 W e b P ub lis h ing W iz a rd 时 自 动 提 供 S e lect S e rv ice P ro v id e r 选 项
- 单
击 N e x t 就 可 以 看 到 下 一 页 面 如 下 图 所 示
注 意 你 需 要 定 义 一 个 到 In te rn e t 服 务 器 的 连 接 在 UR L 域 中 简 单 地 输 入 自 己的 站 点 名 使 用 W e b P ub lis h ing W iz a rd 新 版 本 的 用 户 还 需 要 提 供 与 远 程 W e b 站
点 相 对 应 的 本 地 目 录 这 是 W e b P ub lis h ing W iz a rd 寻 找 发 送 到 W e b 服 务 器 上 文件 的 地 方 绝 大 多 数 情 况 下 使 用 缺 省 目 录 也 就 可 以 了 如 果 你 使 用 W e b P ub lis h in g W iz a rd 那 么 请 跳 到 第 9 步
-
单
击 N e x t W e b P ub lis h ing W iz a rd 就 会 询 问 你 用 于 发 布 信 息 的 UR L 除 非 使用 非 正 常 安 装 否 则 W e b P ub lis h in g W iz a rd 提 供 的 缺 省 UR L 就 工 作 得 很 好
-
单
击 N e x t 就 能 看 到 下 一 页 如 下 图 所 示 该 页 允 许 你 选 择 连 接 的 类 型 LA N 或 拨 号 方 式 不 要 被 对 话 框 中 的 描 述 弄 糊 涂 就 像 为 In te rn e t 建 立 连 接 一 样 你可 以 很 容 易 地 为 内 部 网 建 立 拨 号 连 接
-
在
LA N 连 接 没 有 调 制 解 调 器 的 连 接 或 拨 号 连 接 之 间 选 择 一 项 如 果 你选 择 的 是 拨 号 连 接 方 式 那 么 还 需 要 在 列 表 框 中 选 择 一 种 拨 号 连 接 单 击 N e w D ial- U P C o n n ectio n 按 钮 可 以 创 建 一 个 新 的 连 接 定 义
-
单
击 N e x t W e b P u b lis h ing W iz a rd 会 显 示 下 一 页 该 页 简 单 说 明 你 所 提 供的 信 息 中 需 要 验 证 的 信 息 单 击 N e x t 将 开 始 对 信 息 进 行 验 证 如 果 你 要 建 立 LA N 连 接 几 乎 立 刻 就 会 得 到 如 下 图 所 示 的 错 误 消 息 别 担 心 下 面 几 步 会 告 诉 你如 何 解 决 这 个 问 题 如 果 W e b P u b lis h ing W iz a rd 成 功 地 找 到 了 你 的 站 点 你 就可 以 跳 转 到 第 15 步 了
- 单 击 OK 关 闭 错 误 消 息 对 话 框 你 会 看 到 扩 展 连 接 配 置 的
第 一 页 如 下 图所 示
这 就 是 你 选 择 文 件 传 输 方 式 的 地 方 如 果 你 是 通 过 拨 号 连 接 方 式 访 问 In te rn e t 站点 就 可 以 选 择 FT P 或 H TTP 文 件 传 输 方 式 其 中 的 H TTP 方 法 只 对 使 用 H TTP 版 本 1 .1 及 以 上 版 本 的 W e b 站 点 可 用 如 果 你 使 用 的 是 LA N 那 么 FT P 和W ind ow s F ile T ra n s fe r 选 项 都 可 以 使 用 这 里 不 同 的 连 接 还 需 各 种 不 同 的 定 义
接 着 系 统 将 继 续 显 示 W ind ow s F i le T ra n s fe r 选 项 这 也 正 是 你 经 常 需 要 使 用的 选 项
技 巧 如 果 使 用 的 是 L A N 连 接 应 尽 可 能 使 用 Windows Fi le Transfer 方式 因 为 它 比 较 快 F T P 连 接 需 要 一 个 附 加 的 文 件 传 输 层 这 在 LAN 环 境 中 是 不 需 要 的 不 过 在 WAN 上 F T P 方 式 能 提 供 附 加 的 安 全 保护 层
-
单
击 N e x t 就 能 看 到 如 图 11 .2 所 示 的 下 一 页 在 这 里 连 接 问 题 变 得 明 显了 W e b P u b lis h in g W iz a rd 几 乎 总 是 不 能 找 到 文 件 正 确 的 目 标 UNC 统 一 命 名约 定 原 因 很 简 单 大 部 分 情 况 下 该 名 字 都 被 服 务 器 隐 藏 起 来 了 你 需 要 给自 己 的 存 贮 目 录 提 供 一 个 完 整 的 UNC 如 图 11 .2 所 示 确 保 提 供 的 是 一 个 UNC 名 而 不 是 标 准 的 DOS 驱 动 器 和 目 录 位 置 使 用 UN C 的 原 因 是 它 允 许 你 使用 同 一 种 登 记 项 技 术 而 不 管 服 务 器 使 用 什 么 文 件 系 统
-
单
击 N e x t W e b P u b lis h in g W iz a rd 显 示 下 一 页 该 页 简 单 说 明 要 验 证 你 所提 供 的 信 息 单 击 N e x t 开 始 验 证 过 程 这 次 你 将 会 看 到 一 条 操 作 成 功 的 消 息
图 11 .2 本页 显示 了你 配置 W e b P ublis h ing W iz a rd 时几 乎所 有问 题的产 生根 源
- 单
击 F in is h 完 成 文 件 传 输 过 程 在 W e b P u b lis h ing W iz a rd 为 你 拷 贝 完 文 件时 你 可 以 看 到 一 个 文 件 传 送 对 话 框 文 件 传 送 完 后 可 以 看 到 如 下 图 所 示 的成 功 对 话 框 此 时 你 已 经 修 改 了 该 文 档 访 问 W e b 站 点 的 任 何 人 都 能 自 动 看 到所 做 的 修 改
— 旦 你 首 次 完 成 上 述 设 置 步 骤 用 户 就 可 以 只 用 简 单 的 四 步 完 成 文 件 传 送过 程 而 你 需 要 做 的 就 是 将 文 档 保 存 到 本 地 驱 动 器 上 利 用 F ile |S e n d T o |W e b P ub lis h in g W iz a rd 命 令 启 动 该 W izard 选 中 文 件 并 选 择 一 个 连 接 然 后 单 击 F in is h 就 可 以 完 成 整 个 过 程 即 上 面 所 列 步 骤 1 到 步 骤 4
技 巧 网 络 管 理 员 可 以 在 每 台 机 器 上 只 执 行 这 个 任 务 一 次 用 以 减 少 用 户的 支 持 电 话 遗 憾 的 是 至 少 到 本 书 写 作 时 还 没 有 办 法 像 修 改 注册 表 或 向 一 个 目 标 机 器 拷 贝 文 件 那 样 自 动 完 成 上 述 任 务
11 .2 Ac ti ve Do cum en t 结 构 概 述
理 解 自 己 所 使 用 控 件 的 工 作 方 式 十 分 很 重 要 的 — — 至 少 要 在 一 定 程 度 上 理解 — — 只 有 这 样 在 出 现 问 题 时 你 才 能 够 解 决 它 本 书 无 法 详 细 介 绍 OL E 的 基 本理 论 即 使 整 本 书 都 只 讨 论 这 个 问 题 恐 怕 写 上 1000 页 都 还 不 够 不 过
A c tiv eD o c u m cn t 控 件 只 需 要 O LE 的 一 部 分 特 殊 特 性 这 就 是 本 节 要 介 绍 的 内容
首 先 需 要 理 解 的 是 OL E 控 件 利 用 一 个 公 用 接 口 进 行 工 作 你 使 用 的 每 个O LE 控 件 都 必 须 支 持 特 定 的 类 实 际 上 是 接 口 元 素 以 便 让 应 用 程 序 访 问 它例 如 如 果 客 户 机 需 要 服 务 器 提 供 在 位 操 作 支 持 那 么 它 就 会 调 用 与IO le In p laceA c tiv a teO b jec t 相 关 联 的 方 法 之 一 每 个 支 持 在 位 操 作 的 服 务 器 都 必须 提 供 该 名 字 的 类 并 提 供 给 客 户 机 使 用 本 例 中 客 户 机 的 等 价 类 是IO le D o c u m e n t S ite 实 际 上 你 可 以 支 持 几 百 种 类 及 相 关 方 法 以 便 提 供 各 种OL E 功 能 不 过 不 必 支 持 所 有 类 因 为 某 些 形 式 的 功 能 是 专 用 控 件 不 需 要 的 图 11. 3 显 示 了 在 E x ce l W o rk s h ee t 中 使 用 的 OL E / C O M O b je c t V ie w e r 在 第 九章 中 已 经 介 绍 过 这 个 实 用 程 序 类 接 口 元 素 请 注 意 每 个 类 都 以 I 开 头而 不 是 通 常 使 用 的 C I 表 示 接 口 类 即 客 户 机 访 问 它 们 以 获 得 服 务 器 的 某 种 功能
注 由 于 O L E 控 件 使 用 客 户 机 了 解 和 使 用 的 标 准 接 口 所 以 O L E 控 件 能 够工 作
图 1 1 .3 O L E / C O M O b ject V iew er 提供 了一 种浏 览创建 控件 时需 要支持 的接 口元素 方便 的方 法
注 释 OLE/COM Ob ject Viewer 的 老 版 本 称 为 OLE/COM Ob ject View 这 两个 实 用 程 序 都 能 提 供 同 样 的 信 息
注 释 图 11.3 显 示 了 Microsoft Excel 的 ActiveDocu ment 的 最 新 功 能你 可 以 看 到 四 个 IMso 函 数 这 是 ActiveDocu ment 函 数 的 预 定 义 名 称ActiveX 规 范 现 在 声 称 这 些 是 标 准 的 IOle 类 幸 运 的 是 好 象Internet Explorer 3.0 将 支 持 使 用 两 种 接 口 的 文 档 对 象 不 过 这种 支 持 不 会 持 续 很 长 时 间 的 你 最 好 还 是 使 用 本 章 讨 论 的 IOle 版 本调 用
显 然 试 图 记 住 你 是 否 在 自 己 的 控 件 中 实 现 了 所 有 这 些 调 用 是 不 现 实 的 幸 运 的 是 像 V is u a l C + + 这 样 对 建 立 A c tiv e X 控 件 或 OC X 提 供 直 接 支 持 的ID E 通 常 负 责 创 建 大 量 的 类 现 在 已 有 很 多 编 译 器 厂 家 为 他 们 的 产 品 创 建A c tiv e X 附 加 功 能 例 如 Bo r la n d 的 D e lp h i 就 已 经 包 含 了 一 个 In te rn e t 控 件 包 附加 功 能 以 帮 助 你 建 立 适 用 于 In te rn e t 的 应 用 程 序 另 外 他 们 还 为 每 个 所 需类 实 现 了 一 种 缺 省 动 作 只 有 当 你 需 要 加 入 某 种 编 译 器 不 支 持 的 特 殊 功 能 时 才 需 要 改 变 它 的 动 作 在 第 10 章 中 你 已 经 看 到 如 果 建 立 了 一 个 合 适 的 应 用 程序 框 架 那 么 建 立 一 个 简 单 的 控 件 并 不 需 要 做 太 多 工 作 本 示 例 在 加 入 一 行 代码 之 前 花 费 那 么 大 力 气 来 设 置 好 一 切 配 置 其 原 因 正 在 于 此
实 际 上 有 一 种 简 单 的 方 式 来 讨 论 创 建 A c tiv e D oc um e n t 所 需 的 OL E 接 口 函数 我 们 可 以 用 本 书 中 学 到 的 知 识 来 总 结 A c tiv eD o c u m en t 的 功 能 如 果 希 望 自己 的 应 用 程 序 支 持 这 种 规 范 就 必 须 遵 守 下 述 四 条 原 则
- 实 现
IP e rsiste n t S to ra g e 应 用 程 序 必 须 支 持 该 类 及 其 相 关 方 法 以 便 能 使 用
OL E 复 合 文 件 作 为 存 贮 介 质
- 支
持 OL E 文 档 嵌 入 特 性 该 特 性 可 以 用 多 种 方 式 实 现 目 前 流 行 的 方 式 是
通 过 菜 单 功 能 给 用 户 提 供 两 种 嵌 入 方 法 In s e rt O b je c t 插 入 对 象 和 Pa s te S p ecial 粘 贴 特 殊 项 用 于 完 成 这 项 工 作 的 函 数 是 IP e rsistF ile IO le O b ject 和 ID ata O b jec t
- 提
供 在 位 ( in - p lace) 操 作 支 持 你 必 须 实 现 两 个 类 来 支 持 在 位 操 作
IO le In p laceO b ject IO le P la ceA c tiv a teO b ject 为 实 现 这 些 类 必 须 用
IO le In P la c e S i te 和 IO le In P la c e F ra m e 类 所 提 供 的 方 法 获 取 有 关 容 器 的 信 息
- 加
入 A c tiv eD o c u m en t 扩 展 现 在 大 部 分 O LE 2 服 务 程 序 都 能 完 成 前 面 3 步工 作 为 了 使 它 能 在 In te rn e t 上 工 作 必 须 加 入 我 们 将 简 单 讨 论 的 这 四 个 函数 IO le D o c u m e n t IO le D o c u m e n t V ie w IO le C o m m an d T arg e t 和 Ip rin t 现在 让 我 们 详 细 说 明 一 下 第 四 条 A c tiv e D oc um e n t 在 某 些 方 面 相 当 新 由于 M ic ros oft 对 这 些 规 范 很 长 时 间 没 有 公 开 所 以 几 乎 很 少 有 编 译 器 能 提 供对 A c tiv eD o c u m en t 服 务 器 的 直 接 支 持 也 就 是 说 对 于 程 序 员 或 者 必 须自 己 建 立 附 加 的 接 口 不 很 困 难 或 者 升 级 编 译 器 下 面 四 小 节 要 介 绍的 内 容 是 为 创 建 一 个 功 能 完 整 的 A c tiv e X 文 档 服 务 器 你 必 须 要 支 持 的四 个 附 加 的 接 口 调 用 幸 运 的 是 并 不 是 所 有 这 四 个 接 口 调 用 都 需 要 ─
— 图 11 .3 的 显 示 说 明 在 Ex c e l 中 只 需 要 实 现 其 中 三 个 另 外 A c tiv e X S D K 也 提 供 了 创 建 这 些 接 口 元 素 所 需 的 头 文 件 和 其 它 支 持 文 件 本 节 也 将 对 此作 些 介 绍
技 巧 Microsoft Visual C++ 的 4.2 及 以 上 版 本 对 于 创 建 大 部 分 ActiveX 对 象 类 型 提 供 了 直 接 支 持 其 中 包 括 对 ActiveDocu ment 的 直 接 支 持 也 就 是 说 这 些 版 本 实 际 上 会 创 建 我 们 本 节 所 讨 论 的 所 有 元 素 从 而减 少 创 建 自 己 新 控 件 或 应 用 程 序 时 所 需 要 的 时 间
IOleDocume nt 类
无 论 什 么 时 候 当 某 个 In te rn e t 客 户 看 到 实 现 了 IO le D o c u m e n t 类 的 服 务 器时 它 就 会 知 道 该 服 务 器 能 作 为 一 个 A c tiv eD o c u m en t 服 务 器 In te rn et E x p lo rer 和其 它 In te rn e t 客 户 机 应 用 程 序 在 看 到 你 的 应 用 程 序 相 关 联 的 文 档 时 首 先 要 查询 的 内 容 也 正 是 这 些 不 要 把 标 准 的 在 位 操 作 和 A c tiv e D oc um e n t 服 务 器 所 用 的操 作 混 淆 起 来 你 可 以 建 立 一 个 只 支 持 在 位 操 作 的 应 用 程 序 它 在 本 地 机 器 上会 运 行 得 很 好 但 它 将 不 支 持 In te rn e t 上 的 在 位 活 动
注 lOle Document 通 知 客 户 程 序 你 的 应 用 程 序 可 以 用 作 ActiveDocu ment 服 务 器 并 提 供 了 通 讯 服 务
注 释 许 多 情 况 下 是 否 实 现 该 接 口 并 没 什 么 关 系 因 为 没 有 它 你 的 应用 程 序 也 能 支 持 OLE2 忽 略 该 接 口 的 服 务 器 即 使 它 对 类 似 Word for Windows 这 样 的 本 地 客 户 支 持 在 位 操 作 时 也 只 是 简 单 地 在 一 个 独 立的 窗 口 中 被 打 开
那 么 除 了 让 In te rn e t E x p lo re r 知 道 应 用 程 序 支 持 |
A c t iv e D o c u m e n t 之 外 |
该 |
---|---|---|
类 还 能 做 什 么 呢 ? 每 当 客 户 需 要 创 建 新 的 服 务 器 视 图 |
C reateV ie w 方 法 |
枚 |
举 视 图 En u m V ie w s 方 法 获 取 与 A c tiv e D o c u m e n t 相 关 的 M is c S ta tu s 位G e t D oc M is c S ta tus 方 法 时 都 会 调 用 这 个 类 所 支 持 的 方 法 实 际 上 这 个 类 能 帮 助 你 从 整 体 上 管 理 服 务 器 它 提 供 了 客 户 机 和 服 务 器 进 行 通 讯 的 底 层 功
能
服 务 器 视 图 并 不 等 同 于 用 户 单 击 某 个 连 接 到 你 的 文 档 链 接 时 用 户 所 看 到 的视 图 那 是 由 下 节 要 介 绍 的 IO le D o c u m e n t V ie w 界 面 管 理 的 服 务 器 视 图 提 供的 是 服 务 器 自 身 的 一 个 单 一 实 例 客 户 应 用 程 序 利 用 该 视 图 进 行 通 讯 例 如如 果 客 户 机 需 要 找 出 服 务 器 支 持 哪 些 特 性 它 就 会 利 用 服 务 器 视 图 来 完 成 在介 绍 实 际 的 应 用 程 序 代 码 时 你 会 很 清 楚 地 了 解 这 一 点
注 服 务 器 视 图 是 服 务 器 自 身 的 一 个 单 一 实 例 ─ ─ 它 支 持 在 客 户 机 和 服 务器 间 进 行 通 信
存 在 四 种 标 准 的 混 合 ( m is c e l la ne ous ) 状 态 位 下 面 逐 一 详 细 介 绍
-
DOC
M IS C _ C ANC R E AT M U L T IP L E V IE W S 让 客 户 机 知 道 服 务 器 是 否 能 创建 多 个 视 图 也 就 是 说 该 位 定 义 了 你 是 否 能 同 时 运 行 应 用 程 序 的 多 份 拷贝 大 多 数 情 况 下 现 在 的 服 务 器 都 能 做 到 这 一 点 唯 一 的 例 外 是 CA D 或绘 画 程 序 它 们 的 内 存 需 求 实 在 太 大 了 另 一 个 可 能 不 支 持 该 位 的 应 用 程序 类 是 通 讯 程 序 原 因 在 于 绝 大 多 数 人 都 只 有 一 个 调 制 解 调 器
-
DOC
M IS C _ S UP P O R T C O M P L E X R E C T AN GL E S 用 于 指 出 服 务 器 能 否 支 持复 杂 的 视 图 区 域 命 令 例 如 服 务 器 是 否 允 许 客 户 机 确 定 滚 动 条 和 缩 放 框的 位 置
-
DOC M
IS C _ C ANO P E NE D IT 用 于 向 客 户 机 指 出 服 务 器 能 否 打 开 一 个 文
档 用 于 编 辑 设 置 该 位 能 防 止 用 户 在 线 编 辑 文 档 当 你 基 于 安 全 方 面 的 考虑 或 者 希 望 创 建 一 个 只 允 许 浏 览 的 服 务 器 时 可 以 这 么 做
- DOC
M IS C _ NOF IL E S U P P O R T 用 于 指 出 服 务 器 是 否 支 持 任 意 类 型 的 文 件操 作 设 置 该 位 一 般 会 使 客 户 机 显 示 一 条 错 误 消 息 原 因 在 于 用 户 甚 至 不能 读 取 所 选 的 文 件
IOledocume ntView 类
与 IO le D o c u m e n t 类 相 似 你 必 须 实 现 IO le D o c u m e n t V ie w 类 才 能 使 用A c tiv eD o c u m en t 这 个 特 殊 的 接 口 元 素 依 赖 于 IO le D o c u m e n t 类 打 开 文 档 前 必须 已 有 一 个 服 务 器 在 运 行 另 外 客 户 机 通 过 从 IO le D o c u m e n t 类 的G e t D oc M is c S ta tus 方 法 获 得 的 信 息 才 能 知 道 如 何 与 该 类 进 行 交 互
IO le D o c u m e n t V ie w 类 的 每 个 拷 贝 都 控 制 着 一 个 A c t iv e D o c u m e n t 视 图 的 实 例 大 部 分 情 况 下 这 意 味 着 IO le D o c u m e n t V ie w 类 的 单 个 实 例 控 制 着 单 个 文 档 不过 同 样 可 以 很 容 易 为 自 己 打 开 的 文 档 的 每 个 视 图 创 建 一 个 类 的 实 例
注 服 务 器 视 图 是 服 务 器 自 身 的 单 一 实 例 — — 它 支 持 客 户 与 服 务 器 之 间 的通 讯
IO le D o c u m e n t V ie w 类 支 持 许 多 方 法 表 11 .1 列 出 了 最 普 遍 应 用 的 方 法 可以 看 出 这 些 方 法 允 许 你 改 变 屏 幕 大 小 创 建 你 正 在 看 到 的 视 图 的 另 一 份 拷 贝重 置 视 图 的 边 界 区 域 或 者 确 定 哪 个 文 档 在 当 前 视 图 中 显 示 等
表 1 1 . 1 与 IO le Do cum e n t V i e w 视图类项 关联的方法
方法 |
动作 |
---|---|
S e t In p lac eS ite |
将 视 图 站 点 对 象 与 相 应 视 图 联 系 起 来 客 户 机 提 供 视 图 站 点 对象 本质 上 这是将文 档与当前视图 联系起来的方 法 |
G e tIn p la c e S ite |
返回指向 与视图相关联 的视图站点对 象的指针 |
G e t D oc um e n t |
返回指向 与视图相关的 文档的指针 |
S e t R ect |
定 义 视 图 的 边 界 区 域 也 就 是 说 该 方 法 设 置 用 户 将 看 到 的 窗口的大小 |
G e t R ect |
返回视图 的边界区域坐 标 |
S e tR e c t C o m p le x |
定 义 视 图 的 复 杂 边 界 区 域 该 方 法 不 仅 确 定 用 户 将 看 到 的 窗 口的 大 小 而 且 确 定 诸 如 滚 动 条 和 其 它 视 图 元 素 的 位 置 视 图 不一 定 非 要 支 持 该 特 色 如 果 你 的 应 用 程 序 不 提 供 这 种 支 持 就需要设置 一个混合状态 位 参见 Io le D o c u m e n t 类描述中 的详细 介绍 |
S how |
让客户机 显示或隐藏视 图 |
U IA c t iv a te |
确 定 用 户 接 口 是 否 活 动 正 常 情 况 下 仅 在 视 图 得 到 焦 点 时 用户接口才 是活动的 其它情况 下 用户借 口均不处于活 动状态 这样可以 防止与已经得 到焦点的视图 冲突 |
O p e n |
请 求 服 务 器 在 另 一 窗 口 中 打 开 视 图 可 以 用 混 合 状 态 位 关 闭 该 特色 参见 Io le D o c u m e n t 类中的详 细说明 |
C lo s e V ie w |
关闭视图 |
续 表
S a v e V iew S tate |
将当前视 图状态信息写 入 Is tream |
---|---|
A p p ly V ie w S ta te |
请求视图 将其状态设置 为先前保存在 IS tream 中定义的 设置值 |
C lone |
创 建 当 前 视 图 的 一 个 拷 贝 复 制 的 视 图 与 原 视 图 有 相 同 的 上 下 文关系 但使用 不同的视图端 口 Io le D o cu m e n t V iew 类的实例 |
IOleComman dTarget 类
在 生 成 A c tiv e X 文 档 时 可 以 不 实 现 IO le C o m m a ndT a rg e t 类 但 它 却 不 仅仅 是 为 了 方 便 才 设 置 的 类 IO le C o m m an d T arg e t 类 允 许 客 户 机 和 服 务 器 进 行 交谈 而 不 必 借 助 于 像 设 置 固 定 的 菜 单 ID 那 样 进 行 工 作 但 这 一 通 讯 受 到 限 制例 如 通 讯 仍 然 只 限 于 某 些 命 令 下 面 将 进 一 步 介 绍 为 完 成 接 口 工 作 的 这一 部 分 必 须 分 成 两 个 步 骤 进 行
注 IOleComman dTarget 类 允 许 服 务 器 和 客 户 机 进 行 通 讯 而 不 必 使 用 像 固定 菜 单 I D 这 样 的 技 术
这 种 客 户 机 与 服 务 器 通 讯 的 第 一 个 步 骤 是 找 出 服 务 器 支 持 哪 些 命 令 客户 机 必 须 利 用 Q u e ry 询 问 方 法 来 完 成 表 11 .2 列 出 了 服 务 器 支 持 的 所 有 命令 以 及 它 们 的 标 识 符 的 完 整 列 表 首 先 要 注 意 的 是 大 部 分 命 令 都 是 标 准 的 菜单 项
表 1 1 .2 IO le Co m m a n d T ar ge t 类支持的 常用命令
命令 |
标识符 |
---|---|
Ed i t C le a r |
O LEC M D ID _ C LEA R S ELE C T IO N |
Ed i t C o p y |
O LEC M D ID _ C O P Y |
Ed i t C u t |
O LEC M D ID _ C U T |
Ed i t P a s te |
O LEC M D ID _ P A S TE |
E d i t P a s te S p ecial |
O L E C M D ID _ P A S T E R S P E C IA L |
Ed i t R e d o |
O LEC M D ID _ R ED O |
Ed i t S e le c t A l l |
O LEC M D ID _ S E LEC TA LL |
E d i t U n d o |
OL E C M D ID _ UNDO |
F i le N e w |
O LEC M D ID _ N EW |
F ile O p e n |
O L E C M D ID _ O P E N |
F ile Pa g e Se tu p |
O L E C M D ID _ P A G E SE T U P |
F ile P rin t |
O L E C M D ID _ P R IN T |
F ile P rin t P re v ie w |
O L E C M D ID _ P R IN T P R E V IE W |
F ile P ro p e rtie s |
O L E C M D ID _ P R O P E R T IE S |
F i le S a ve |
O L E C M D ID _S A V E |
F i le S a v e As |
OL E C M D ID _ S AVE AS |
F i le S a ve C opy A s |
O L E C M D ID _S A V E C O P Y A S |
续 表
非标 准 命 令 该 标 识 符 询 问 服 务器 是 否 能 完 成 下 面 三 个 任 务 返回缩 放 值 显 示 缩 放 对 话 框 以 及设置 缩 放 值 如 果 服 务 器 支 持 这三 项 任 务 则 该 标 识 符 一 般 与V ie w 菜 单 命 令 或 等 价 命 令 相对应 |
O LEC M D ID _ Z O O M |
---|---|
非标 准 命 令 该 标 识 符 获 取 服 务器 支 持 的 缩 放 范 围 如 果 服 务 器支持它 则该 标识符一般与 V ie w Zo o m 命 令 或 等 价 命 令 相 对 应 |
OL E C M D ID _ G E T Z OOM R ANGE |
T o o ls s p e llin g |
O L E C M D ID _ S P E L L |
客 户 / 服 务 器 通 讯 的 第 二 个 步 骤 是 使 用 Ex e c 方 法 客 户 机 给 服 务 器 发 送 一个 或 多 个 O LEC M D 结 构 每 个 结 构 将 只 包 含 一 条 命 令 该 命 令 所 需 要 的 输 入参 数 以 及 存 放 调 用 返 回 信 息 标 志 的 位 置 你 不 必 提 供 什 么 输 入 参 数 因 此 结 构的 该 部 分 应 为 NUL L 标 准 的 选 项 请 参 见 表 11 .3 表 11 .4 描 述 了 Ex e c 调 用 返回 的 标 志
表 1 1 .3 标准 Ex ec 方法的输 入参数
标志 | 动作 |
---|---|
O LEC M D EX EC O P T_ P R O M P T U S E R | 在 执 行 命 令 前 提 示 用 户 输 入 一 些 信 息 例 如 使用 F ile O p e n 命令时 你就会使用该选项 |
OL E C M D E X E C OP T _ DONT P R O M P US E R | 不 要 求 用 户 作 任 何 输 入 例 如 当 用 户 请求打印文 档时 可以使 用该选项 |
OL E C M D E X E C OP T _ DODE F AUL T | 当 你 不 清 楚 是 否 要 提 示 用 户 时 使 用 该 选项 这 种 情 况 下 可 以 让 应 用 程 序 执 行 缺 省动 作 大 部 分 情 况 下 这 意 味 着 将 提 示 用 户 进行输入 |
O LEC M D EX EC O P T_ S H O W H L P | 根 本 不 执 行 命 令 而 是 显 示 它 的 帮 助 屏 如果你 的 A c t iv e D oc um e n t 能 提供另 外的 帮助按钮 就可以使用该 命令 |
表 1 1 .4 标准 Ex ec 方法的返 回值
标志 |
动作 |
---|---|
O L E C M D F_ SU PPO R T E D |
视图对象 支持请求的命 令 |
O LEC M D F _ EN A B LED |
该命令可 以使用且视图 对象已把它激 活 |
O LEC M D F _ LA T C H E D |
该命令使 用了一个 O n / O f f 开关并且 现在开关被置 为 On |
OL E C M D F _ N INC HE D |
视图对 象不 能确 定 使 用 O n / O f f 开 关 的 命 令 的 状 态 大多 数 情 况 下 意 味 着 该 命 令 使 用 的 是 三 态 配 置 并 且 正处 于 不 确 定 状 态 例 如 如 果 用 户 为 某 安 装 程 序 选 择了 一 些 子 项 但 没 选 其 它 项 的 话 一 个 三 态 复 选 框 就 可 能返回该 值 该复选 框在屏幕上显 示为灰色 |
Iprint 类
IP rin t 是 另 一 个 你 能 够 实 现 的 可 选 类 该 类 允 许 某 个 对 象 编 程 打 印 IP rin t 支持 三 种 方 法 打 印 (P rin t) 获 取 与 打 印 相 关 的 信 息 (G e t P a g e In fo ) 以 及 设 置 打 印 作业 的 初 始 页 号 ( S etIn i tia l P ag eN u m ) 三 种 方 法 中 只 有 P rin t 方 法 接 收 任 意 个 数的 标 志 作 为 输 入 表 11 .5 列 出 了 这 些 标 志 以 及 它 们 的 用 法
注 IPrint 的 作 用 不 言 自 明 — — 允 许 对 象 支 持 可 编 程 方 式 打 印
表 1 1 .5 IP ri n t 的 P r int 方法支持 的标志
标志 |
动作 |
---|---|
P R IN T F L AG _ M AYB O T HE R U SE R |
告诉 服务 器 客户 机允 许用 户进 行 交 互操 作 如果 没 设该标 志 任何 打印 请求 都必 须自 己 完 成 大部 分情 况 下客户 机都 允许 用户 交互 ── 唯一 的 例 外可 能涉 及批 处 理打印作业 或者打印操作 处于后台的情 况 |
PR IN T F L A G _ PR O M PT U S E R |
提 示 用 户 在 标 准 打 印 对 话 框 类 似 于 W indow s 支 持 的打印 框 中输 入有 关打 印作 业的 信 息 例 如 如果 指 定该选 项 则用 户可 以选 择拷 贝份 数 使用 该选 项还 必 须同 时 指 定 P R IN T F L AG _ P R O M P T M A YB OT HE R - US E R 标志 |
P R IN T F L AG _ US E R M AYC HA N G E -D P R IN T E R |
允许 用户 修改 打印 机设 置 不过 有 些 情况 下可 能不 希 望指定 该选 项─ ─比 如在 网络 环境 中 用 户就 不太 容易 访 问到 打 印 机 使 用 该 选 项 必 须 同 时 指 定 PR IN T F L A G _ PR O M PT U S E R 标 志 |
P R IN TF L A G _ R E C O M P O S ETO DE V - IC E |
告诉 目标 打印 机进 行打 印作 业重 组 例如 如 果 目 标 打 印机 支持 比目 前打 印作 业指 定的 分 辩 率更 高 打印 作 业就应使用 更高的分辩率 |
P R IN T F L A G_ DONT AC T U A L L YP R - IN T |
测试 打印 作业 但 并 不 真 正 创 建 任 何 输 出 该 选 项 允 许你在不浪 费纸张的情况 下测试用户接 口的功能 |
P R IN TF LA G _ P R IN TTO F IL E |
将打印输 出送往文件而 不是打印机 |
11 .3 创 建 Ac ti ve Do cum en t
前 面 几 节 已 经 介 绍 了 利 用 A c tiv e D oc um e n t 应 用 程 序 如 W o rd fo r W indow s 或 Ex c e l 可 以 做 些 什 么 如 果 你 是 一 个 只 需 要 得 到 一 些 增 强 性 能 的 高 级 用 户或 者 是 一 个 只 想 优 化 自 己 的 W e b 站 点 的 W e b 管 理 员 那 么 这 些 就 足 够 了
但 毕 竟 你 是 一 个 需 要 用 这 些 功 能 创 建 应 用 程 序 的 程 序 员
即 使 对 最 好 的 程 序 员 而 言 手 工 加 入 前 文 所 述 的 所 有 四 个 接 口 也 是 相 当 困难 的 而 且 由 于 M ic ros oft 已 经 发 布 了 C+ + 的 新 版 本 4 .2 以 上 版 本 都 可 以不 过 5 .0 比 4. 2 更 好 用 一 些 6 .0 版 则 已 天 衣 无 缝 了 实 际 上 也 没 有 必 要 去 找这 个 麻 烦 本 节 要 介 绍 的 就 是 创 建 支 持 A c tiv eD o c u m en t 的 应 用 程 序 的 快 速 方 法创 建 其 它 任 何 应 用 程 序 都 有 的 步 骤 这 里 就 不 再 详 述 了 而 着 重 介 绍 工 程 中 涉 及A c tiv e X 的 特 定 部 分
首 先 你 需 要 完 成 的 任 务 是 创 建 一 个 新 的 工 程 工 作 区 第 二 章 我 们 已 经 介绍 了 完 成 这 项 工 作 的 步 骤 你 可 以 选 择 M F C A ppW iz a rd 然 后 给 应 用 程 序 命 名
— ─ 本 例 把 它 命 名 为 A c tiv D o c 单 击 OK 开 始 一 个 创 建 过 程 可 以 看 到 M F C A ppW iz a rd 的 第 一 页 为 简 单 起 见 选 择 W izard 第 一 页 上 的 S in g le D o cu m e n t 选 项 两 次 单 击 N e x t 跳 过 W iz a rd 的 第 一 和 第 二 页 下 面 你 将 看 到 第 三 页 对 话框
第 三 页 是 为 应 用 程 序 完 成 大 部 分 A c tiv e D oc um e n t 设 置 的 地 方 你 可 以 为 应用 程 序 提 供 五 个 不 同 层 次 的 OL E 支 持 最 后 的 三 个 层 次 允 许 你 添 加A c tiv eD o c u m en t 支 持 M in i- S e rve r 选 项 不 允 许 单 独 运 行 应 用 程 序 ─ ─ 必 须 在
W o rd fo r W indow s In te rn e t E xp lore r 3 .0 或 其 它 什 么 容 器 中 运 行 它 如 果 你 想 创建 文 件 浏 览 器 这 一 级 支 持 确 实 不 错 下 一 选 项 是 Fu ll- Se rv e r 它 允 许 应 用 程序 自 己 运 行 你 可 以 利 用 这 种 应 用 程 序 来 支 持 对 象 但 不 显 示 它 们 绘 图 程 序经 常 是 服 务 器 应 用 程 序 的 好 例 子 但 是 不 必 作 为 一 个 容 器 来 运 行 最 后 一 级 B o th C o n tain e r an d S e rv er 容 器 与 服 务 器 是 本 示 例 要 选 择 的 选 项 它 允 许 你在 应 用 程 序 中 提 供 完 整 的 O LE 2 功 能 包 括 嵌 入 对 象 另 外 你 还 可 以 选 择A c tiv eX D o cu m e n t S e rv er 文 档 服 务 器 复 选 框 如 下 图 所 示 另 外 要 确 保选 中 A u to m a tio n ( 自 动 化 和 A c tiv e X C o n tro ls 控 件 复 选 框 下 图 是 选 择 选项 后 对 话 框 的 外 观
注 释 ActiveX Document container 文 档 容 器 是 Visual C++ 6.0 的 新特 色 它 允 许 建 立 的 应 用 程 序 包 含 其 它 的 ActiveDocu ment 例 如利 用 这 种 特 色 可 以 在 没 有 真 正 提 供 HTML 能 力 的 应 用 程 序 中 显 示Internet E xplorer 文 档
单 击 N e x t 系 统 将 显 示 M F C A ppW iz a rd 的 第 四 页 该 页 上 的 大 部 分 设 置 都
已 完 成 你 可 能 想 把 R ece n t F i le L is t 最 新 文 件 列 表 的 值 设 置 的 再 高 一 点
因 为 大 多 数 人 都 喜 欢 该 特 性 它 当 然 要 占 用 硬 盘 空 间 大 部 分 情 况 下 设 为 9
或 10 就 足 够 了 本 示 例 中 设 置 为 10
该 页 还 包 括 一 个 A dva nc e d 高 级 选 项 按 钮 ─ ─ 如 果 不 仔 细 的 话 大 部 分程 序 员 都 会 忽 略 该 按 钮 不 幸 的 是 该 按 钮 实 在 不 应 该 标 识 为 A dva nc e d 也许 M ic ros oft 应 考 虑 对 A pp lic a tion W iz a rd 应 用 程 序 向 导 做 点 修 改 使 某 些 设置 的 意 义 更 明 确 一 些 单 击 A dva nc e d 按 钮 即 会 显 示 如 图 11 .4 所 示 的 对 话框
图 11 .4 A d v a nc e d O p t io n s 对话 框中 至少 包含了 一个 需要 在创建 应用 程序前 修改 的选 项
A dva nc e d O p tions 高 级 选 项 对 话 框 的 D o c u m e nt T e m p la te S tr ings 文 档模 板 串 属 性 页 允 许 你 为 应 用 程 序 设 置 文 件 扩 展 名 另 外 它 还 自 动 完 成 一 些幕 后 的 工 作 本 例 使 用 的 文 件 扩 展 名 为 AXD 你 要 做 的 工 作 就 是 在 第 一 个 域 开始 为 空 中 输 入 扩 展 名 也 许 你 还 想 修 改 其 它 字 符 串 如 F ra m e C a p t io n 主 框
架 标 题 域 该 例 使 用 A c tiv e X D o c u m e n t E d i to r 文 档 编 辑 器 另 外 你 可
能 想 让 F ilte r N a m 过 滤 器 名 称 域 中 的 输 入 值 更 富 于 描 述 性 初 始 时 它 是 A c tiv D
F ile s (* .a xd) 把 它 更 改 为 A c tiv e X D o c u m e nt F i le s (* .a xd) 时 可 读 性 会 更 好 些 有些 人 确 实 不 太 在 意 F ile T y p e N a m e 文 件 类 型 名 称 域 的 长 短 缺 省 为 A c t i D D o c u m e n t 不 过 如 果 把 它 更 改 为 A c tiv e X D o c u m e n t 一 定 会 对 以 后 注 册 时 的 检索 大 有 帮 助 另 外 它 也 是 在 W ind ow s 上 下 文 相 关 菜 单 中 用 于 显 示 你 的 新 文 档的 字 符 串 稍 后 还 将 进 一 步 介 绍 做 完 这 些 修 改 后 A dva nc e d O p tions 对 话框 应 如 下 图 所 示
至 此 我 们 已 经 完 成 了 创 建 一 个 简 单 的 A c tiv e D oc um e n t 服 务 器 的 所 有 选 项设 置 但 还 有 一 点 需 要 修 改 单 击 C lo s e 关 闭 A dva nc e d O p tions 对 话 框 单 击N e x t 两 次 就 可 以 到 达 M F C A ppW iz a rd- S te p 6- 6 对 话 框 在 类 列 表 中 选 择C A ctiv eD o c V iew 项 然 后 在 B a se C la ss( 基 类 域 中 选 择 CR ic h E d i t V ie w 此 时的 对 话 框 如 下 图 所 示
最 后 一 步 的 目 的 是 在 你 愿 意 时 允 许 把 该 例 子 的 应 用 程 序 作 为 简 单 的 编辑 器 如 果 愿 意 的 话 你 还 可 以 实 现 标 准 的 CV ie w 类 它 不 影 响 该 程 序 作 为A c tiv eD o c u m en t 服 务 器 的 功 能 现 在 单 击 F in is h 完 成 该 工 程 就 会 看 到 如 下 图所 示 的 N e w P ro je c t In fo rm a t io n 新 工 程 信 息 对 话 框
花 点 时 间 浏 览 一 下 特 性 列 表 以 确 定 应 用 程 序 所 需 的 A c tiv e X 支 持 是 否 完整 做 过 几 个 工 程 后 你 就 能 通 过 该 对 话 框 迅 速 发 现 问 题 了 单 击 OK 生 成工 程
测 试 缺 省 的 应 用 程 序
现 在 虽 然 我 们 的 示 例 应 用 程 序 还 做 不 了 太 多 的 事 但 它 确 实 能 在 W iz a rd 之 外 做 一 些 什 么 了 当 M F C A ppW iz a rd 创 建 完 成 之 后 你 可 以 编 译 并 运 行 该 应用 程 序 运 行 应 用 程 序 很 重 要 因 为 第 一 次 运 行 时 应 用 程 序 将 生 成 一 些 注 册表 项 可 以 发 现 的 第 一 个 变 化 是 W ind ow s 上 下 文 相 关 菜 单 现 在 包 含 了 应 用 程 序文 件 类 型 的 一 个 表 项 如 下 图 所 示 并 且 它 与 前 面 章 节 中 我 们 在 A dva nc e d O p tions 对 话 框 的 F ile T y p e N a m e 域 中 输 入 的 名 称 一 样
你 还 可 以 发 现 另 一 个 变 化 图 11 .5 显 示 了 在 O L E / C O M O b je ct V iew er 实 用
程 序 前 面 已 用 过 它 中 的 A c tiv e X 文 档 应 用 程 序 类 型 可 以 看 出 它 与 其 它的 文 档 对 象 — — 比 如 W o rd fo r W indow s — — 列 在 了 一 起 你 应 该 能 够 立 即 发 现本 章 介 绍 的 四 个 接 口 在 这 里 一 个 也 没 有 出 现 就 像 W o rd fo r W indow s 或 其 它B inde r 程 序 一 样 在 程 序 已 经 准 备 好 进 行 测 试 之 前 检 查 接 口 本 节 稍 后 会 让 你了 解 为 什 么 这 样 做 会 大 大 节 省 时 间 和 精 力
A c tiv e D o c 程 序 还 能 够 创 建 一 个 基 本 的 容 器 文 件 你 需 要 做 的 工 作 只 是 用In s e rt/ O b je c t 命 令 给 当 前 文 档 加 入 一 个 已 有 的 对 象 你 可 以 将 该 文 件 保 存 到 磁 盘中 现 在 试 着 创 建 一 个 容 器 文 件 以 便 能 用 In te rn e t E x p lo re r 测 试 应 用 程 序 框 架确 保 已 插 入 了 一 个 对 象 然 后 保 存 文 件 否 则 打 开 文 档 时 将 什 么 也 看 不 见 该例 使 用 Co lo r B lk . BM P 作 为 对 象 而 文 件 本 身 保 存 为 T E S T D OC . AXD 一 旦 你创 建 了 测 试 文 档 就 应 该 创 建 一 个 HT M L 页 面 来 测 试 它 程 序 列 表 11 .2 显 示 了该 例 使 用 的 代 码
图 11 .5 A c t iv D o c 应用 程序 作为 D o cu m e n t O b ject 文档 对象 显示在
OL E /C O M Ob je c t V ie w e r 实用 程序 中
程 序 列 表 11.2
<H T M L >
<H E A D >
< T IT L E > n e w P a g e < / T IT LE>
< / HE AD>
< B ODY>
<!- 显示标题 ->
< C EN TE R > < H 2 > A c t iv e X D o c u m e n t Te s t< / H 2 > < / C EN TER >
<!- 创建一个 到测试文档的 链接 ->
C l ic k < A HR E F = " T e s t D o c .AXD " > H e re < / A > to te s t th e AXD f i le
< / B ODY>
< / H T M L >
既 然 我 们 已 经 有 了 一 个 测 试 基 础 那 么 让 我 们 看 一 下 应 用 程 序 的 工 作 情 况在 In te rn e t E x p lo re r 中 打 开 W e b 测 试 页 然 后 单 击 测 试 链 接 你 看 到 的 是 在 In te rn e t E xp lo re r 中 我 们 的 测 试 应 用 程 序 的 一 个 副 本 如 图 11 .6 所 示 就 如 同 在 W o rd fo r W ind ow s 中 工 作 时 一 样 请 注 意 示 例 应 用 程 序 已 经 接 管 了 浏 览 器 的 菜 单 和 工 具栏 就 如 同 在 W o rd fo r W indow s 文 档 中 一 样 另 外 使 用 菜 单 可 以 插 入 新 对 象还 可 以 执 行 其 它 任 务 就 好 象 应 用 程 序 是 在 本 地 文 档 中 工 作 一 样 你 还 可 以 使
用 W e b P ub lis h in g W iz a rd 本 章 前 面 已 详 细 介 绍 过 它 来 保 存 这 些 修 改
图 11 .6 如任 何 A c t iv e X 文档 一样 我们 的文档 显示 在浏 览器窗 口中
注 释 如 果 一 切 正 常 系 统 会 显 示 一 个 对 话 框 询 问 是 保 存 还 是 打 开 文 件 当 然 假 定 你 在 前 面 的 会 话 中 没 有 关 掉 对 话 框 一 定 要 告 诉 浏 览 器是 打 开 文 件 这 样 才 能 真 正 浏 览 它
转 换 现 存 的 应 用 程 序
如 果 你 有 一 个 非 常 出 色 的 应 用 程 序 但 它 却 不 支 持 A c tiv e D oc um e n t 请 别担 心 只 要 稍 微 做 点 工 作 就 能 将 它 转 换 成 能 够 提 供 这 种 支 持 的 应 用 程 序 了 ─ ─ 至 少 比 从 头 开 始 重 写 该 程 序 要 省 事 多 了 下 面 就 将 介 绍 转 换 过 程 的 5 个 步 骤如 下 所 述 你 可 以 利 用 它 将 任 何 一 个 已 有 的 OL E 服 务 器 转 换 为 基 本 的A c tiv eD o c u m en t 服 务 器 不 过 要 记 住 只 能 提 供 基 本 的 支 持 某 些 应 用 程 序 会 和
这 个 例 子 一 样 工 作 正 常 有 些 却 不 行 在 开 始 加 入 支 持 项 之 前 应 再 花 点 时 间去 看 看 本 章 A c tiv eD o c u m en t 结 构 概 述 一 节 并 记 下 要 点 做 完 附 加 的 支 持 工作 后 一 定 要 用 实 际 的 In te rn e t 环 境 而 不 是 本 地 驱 动 器 来 测 试 它 们 这 样 做 能 保证 测 试 所 有 接 口 并 且 保 证 应 用 程 序 不 会 因 为 使 用 了 标 准 的 OL E 接 口 而 没 有使 用 你 真 正 想 测 试 的 A c tiv eD o c u m en t 接 口 来 工 作
步 骤 1 实 现 所 需 的 类
首 先 并 且 最 明 显 的 一 步 是 实 现 创 建 A c tiv e X 文 档 服 务 器 所 需 的 类 如 果 你比 较 一 下 前 面 创 建 的 例 子 和 其 它 C+ + 4 .2 版 之 前 的 应 用 程 序 就 会 注 意 到 声 明类 的 方 式 有 点 不 同 这 是 因 为 M ic ros oft 已 经 从 原 来 的 M F C 类 中 导 出 了 许 多 子类 并 且 给 它 们 加 入 了 一 些 功 能 表 11 .6 列 出 了 哪 些 类 作 了 修 改 以 及 作 了 什 么修 改 第 一 列 是 在 C+ + 4 .2 版 之 前 的 应 用 程 序 中 使 用 的 类 声 明 第 二 列 是 现 在的 声 明 第 三 列 告 诉 你 影 响 了 哪 些 文 件 第 四 列 则 是 在 以 前 M F C 类 文 件 中 可能 会 发 现 的 另 外 的 类 声 明 ─ ─ 它 们 是 基 于 M ic ros oft O f f ic e B ind e r 声 明
表 1 1 .6 Ac ti v e 文档类声 明
最初的类 说明 |
C++ 4. 2 以上版本 的 新说明 |
Act iv Do c 例 子程序文 件 |
MFC 类说明 |
---|---|---|---|
clas s C In P la c e F ra m e: |
clas s |
IP F ram e .H |
c la s s C In P la c e F ra m e: |
pub l ic |
C In P laceF ra m e : |
pub l ic |
|
C O le IP F ram eW n d |
pub l ic |
C D o c O b ject IP F ram e |
|
C o le F ram eIP W n d |
W n d |
续 表
clas s C A ctiv D o c D o c : pub l ic Co le S e rv e r D o c |
clas s C A c tiv D o c D o c : pub l ic Co le S e rv e r D o c |
A c t iv D o c D o c . H |
clas s C A ctiv D o c D o c : pub l ic D o cO b ject S e rv er D o c: |
---|---|---|---|
clas s C activ D o cS rv r : |
clas s |
S rv r I tem .H |
clas s C A ctiv D o cS rv r : |
pub l ic |
C A ctiv D o cS erv r : |
pub l ic |
|
C o le S e rv er I tem |
pub l ic |
C D o c O b ject S e rv e r I te |
|
C D o c O b ject S e rv e r |
m |
在 头 文 件 中 替 换 了 这 些 声 明 后 你 还 需 要 在 相 应 的 CP P 文 件 中 替 换 它 们 利 用 M ic ros oft D e ve lope r 的 检 索 和 替 换 功 能 会 使 工 作 变 得 容 易 一 点 你 不 必 担心 会 漏 掉 使 用 新 类 名 的 地 方 在 你 做 完 头 文 件 中 的 修 改 后 编 译 器 会 自 动 指 出不 一 致 的 地 方 所 以 必 须 先 做 头 文 件 修 改 并 且 在 往 下 做 之 前 好 好 检 查 注 意如 果 你 想 用 A c tiv e X S D K 和 老 的 M F C 文 件 集 来 实 现 A c tiv e D oc um e n t 服 务 器 那 么 必 须 修 改 三 个 头 文 件 而 如 果 用 V is u a l C ++ 4 .2 以 上 版 本 只 需 要 修 改 两 个头 文 件
步 骤 2 添 加 一 个 简 单 的 声 明
第 二 步 是 给 应 用 程 序 的 ST D A FX .H 文 件 中 添 加 一 个 简 单 的 声 明
# inc lude <a fx doc o b .h >
该 头 文 件 包 含 了 使 应 用 程 序 支 持 文 档 对 象 所 需 要 的 所 有 声 明 实 际 上 略
微 看 看 该 文 件 就 很 有 启 发 因 为 它 准 确 地 声 明 了 四 个 A c tiv eD o c u m en t 接 口 元 素是 怎 样 实 现 的
步 骤 3 修 改 注 册 表 项
第 三 步 是 修 改 你 使 用 注 册 表 项 的 方 式 你 正 在 创 建 的 应 用 程 序 已 不 再 仅 仅是 一 个 在 位 In -p la c e 服 务 器 所 以 需 要 在 CW in A p p . CP P 文 件 本 例 是A c tiv D o c .C P P 文 件 中 修 改 注 册 表 项 把 OAT _ INP L A C E _ S E R VE R 改 为OAT _ DOC _ O B J E C T _ S E R V E R 代 码 如 下 所 示
m _ s e rv er.U p d ateR e g is try ( O A T _ D O C _ O B J E C T _ S E R V E R ) ;
步 骤 4 修 改 语 法 分 析 映 射 (Parse Map )
第 四 步 是 修 改 某 些 语 法 分 析 映 射 因 为 必 须 让 应 用 程 序 知 道 将 打 印 命 令 和其 它 OL E 相 关 信 息 送 往 何 处 此 时 你 需 要 对 两 个 文 件 进 行 修 改 第 一 个 是 应用 程 序 文 档 头 文 件 本 例 中 即 为 A c tiv D o c D o c .H 你 必 须 加 入 下 列 代 码 行
/ / G en era ted m e s s a g e m a p fu n c t io n s pro te c te d:
//{ { A F X _ M S G ( C A c tiv D o c D o c )
//N O T E - th e C la s s W iz a rd w ill a d d a n d re m o v e m e m b e r fu n c tio n s h e re .
/ / D O N O T E D IT w h at y o u s ee in th es e b lo c k s o f g e n e ra te d cod e !
/ /} } A FX _ M SG
DE C L AR E _ M E S S AGE _ M A P ( )
DE C L AR E _ OL E C M D _ M AP ( )
};
如 果 消 息 映 射 包 括 DE C L AR E _ M E S S AGE _ M A P ( ) 消 息 映 射 函 数 就 一 定要 在 其 后 加 入 DE C L AR E _ OL E C M D _ M AP ( ) 第 二 个 文 件 是 应 用 程 序 文 档 CP P 文 件 在 文 件 的 一 开 头 你 会 看 到 至 少 有 一 个 用 于 消 息 的 映 射 区 还 要 加 入 另外 一 个 映 射 区 如 下 所 示
B E G IN _ OL E C M E _ M AP ( C A c t iv e D o c D o c ,C O le S e rv e r D o c ) O N _ O LEC M D _ P A G E S ETU P ( )
ON _ O L E C M D _ P R INT ( ) E ND _ OL E C M D _ M A P ( )
正 如 你 所 看 到 的 那 样 增 加 的 代 码 允 许 应 用 程 序 使 用ID _ F IL E _ P AGE _ S E T UP 和 ID _ F IL E _ P R IN T 标 准 标 识 符 在 它 们 的 处 理 函 数中 通 过 安 排 打 印 函 数 来 完 成 打 印 作 业 你 要 做 的 工 作 只 是 给 真 正 的 句 柄 函 数加 入 命 令 映 射 如 下 所 示
O N _ C O M M A N D ( ID _ F IL E _ P R IN T ,O n F ile P rin t)
步 骤 5 添 加 新 函 数
第 五 步 也 是 最 后 一 步 用 来 给 你 的 应 用 程 序 文 档 头 文 件 及 CP P 文 件 增 加新 函 数
- 旦
完 成 这 些 修 改 后 必 须 编 译 并 测 试 修 改 后 的 应 用 程 序 大 多 数 情 况 下
可 以 先 在 本 地 机 上 进 行 测 试 以 保 证 这 些 修 改 不 会 造 成 破 坏 确 信 这 些 修 改 不会 影 响 本 地 机 性 能 后 可 以 试 着 从 浏 览 器 中 打 开 文 档 文 档 将 在 浏 览 器 中 打 开而 不 是 在 另 一 窗 口 中 就 像 图 11 .6 所 示 一 定 要 保 证 该 应 用 程 序 如 同 在 本 地机 上 使 用 时 那 样 能 提 供 层 次 的 功 能 比 如 F ile |S a v e 命 令