MFC 中 的 宏 和 全 局 函 数 、 变 量
微 软 基 础 类 库 可 以 分 成 两 个 主 要 部 分 : ( 1 ) MFC 类, ( 2 ) 宏 和 全 局 函 数 、 变量 。 如 果 一 个 函 数 或 者 变 量 不 是 某 个 类 的 成 员 , 它 就 是 全 局 的 函 数 或 变 量 。
MFC 类 库 和 活 动 模 板 库 ( ATL ) 共 用 一 些 字 符 串 转 换 宏 。 参 看 ATL 文 档 中 的“ 字 符 串 转 换 宏 ” 部 分 , 其 中 包 含 了 对 这 些 宏 的 讨 论 。
MFC 中 的 宏 和 全 局 函 数 、 变 量 提 供 了 下 列 方 面 的 功 能 :
General MFC
-
数 据 类 型
-
MFC 类 对 象 的 强 制 类 型 转 换
-
运 行 时 对 象 模 型 服 务
-
诊 断 服 务
-
异 常 处 理
-
字 符 串 格 式 化 和 消 息 框 显 示
-
消 息 映 射
-
应 用 程 序 信 息 和 管 理
-
标 准 命 令 和 窗 口 ID
-
集 合 类 帮 助 函 数
-
ClassWizard 注 释 限 定 符
Database
-
应 用 于 MFC 中 ODBC 类 的 记 录 字 段 交 换 ( RFX ) 函 数 和 成
组 记 录 字 段 交换 ( Bulk RFX ) 函 数 。
-
应 用 于 MFC 中 DAO 类 的 记 录 字 段 交 换 (DFX )函 数 。
-
应 用 于 CRecordView 和 CDaoRecordView ( MFC 中的 ODBC 和 DAO 类 )
的 对 话 框 数 据 交 换 ( DDX ) 函 数 。
-
应 用 于 OLE 控 件 的 对 话 框 数 据 交 换 ( DDX ) 函 数 。
-
用 于 辅 助 直 接 调 用 开 放 数 据 库 连 接 ( ODBC ) API 函 数 的
宏 和 全 局 函 数 、变 量 。
-
DAO 数 据 库 引 擎 的 初 始 化 和 结 束 函 数 。
Internet
-
Internet 服 务 器 API ( ISAP I) 解 析 映 射 。
-
Internet URL 解 析 全 局 函 数 。
-
Internet 服 务 器 API ( ISAP I) 诊 断 宏 。
-
OLE 初 始 化 。
-
应 用 程 序 控 制 。
-
调 度 映 射 。
另 外 , MFC 提 供 了 一 个 函 数 , 名 为 AfxEnableControlContainer, 它 使 任 何 一 个用 MFC4.0 开 发 的 OLE 容 器 都 能 够 完 全 支 持 复 合 OLE 控 件 。
OLE 控 件
-
可 变 参 数 类 型 常 量 。
-
类 型 库 访 问 。
-
属 性 页 。
-
事 件 映 射 。
-
事 件 接 收 映 射 。
-
连 接 映 射 。
-
注 册 OLE 控 件 。
-
类 工 厂 和 注 册 。
-
OLE 控 件 的 持 续 性 。
本 章 的 第 一 部 分 简 要 地 讨 论 了 上 面 的 每 一 个 方 面 , 列 出 了 该 方 面 的 每 个 全 局 函数 、 变 量 和 宏 , 同 时 还 简 要 地 描 述 了 它 们 的 功 能 。 随 后 , 按 照 字 母 顺 序 详 细 讨
有 关 MFC 中 的 宏 和 全 局 函 数 、 变 量 的 主 要 参 考 材 料 是 《 V isual C++ 程 序 员 指南 》 。 通 常 当 你 需 要 寻 找 有 关 宏 和 全 局 函 数 、 变 量 的 信 息 的 时 候 , 你 首 先 会 去查 询 这 个 地 方 。 如 果 有 必 要 , V isual C++ 程 序 员 联 机 指 南 在 描 述 函 数 或 者 宏 的时 候 会 提 及 适 当 的 文 章 。
注意 许 多 全 局 函 数 以 前 缀 “ Afx ” 开 始 — — 有 一 些 例 外 , 比 如 对 话 框 数据 交 换 函 数 ( DDX ) 和 一 些 数 据 库 函 数 不 符 合 这 个 约 定 。 所 有 的 全 局 变 量都以 “ Afx ” 为 前 缀 。 宏 没 有 什 么 特 定 的 前 缀 , 但 是 它 们 都 是 以 大 写 形 式出 现 的 。
数 据 类 型
本 章 列 出 了 微 软 基 础 类 库 中 最 常 见 的 数 据 类 型 。 大 多 数 数 据 类 型 是 与 W indows
软 件 开 发 工 具 包 ( SDK ) 中 一 致 的 , 也 有 一 些 是 MFC 独 有 的 。下 面 的 数 据 类 型 是 W indows SDK 和 MFC 共 用 的 :
-
BOOL 布 尔 值 。
-
BSTR 32 位 字 符 指 针 。
-
BYTE 8 位 无 符 号 整 数 。
-
COLORREF 用 作 颜 色 值 的 32 位 值 。
-
DWORD 32 位 无 符 号 整 数 , 或 者 是 段 地 址 以 及 与 之 相 关 的
偏 移 量 。
-
LONG 32 位 带 符 号 整 数 。
-
LPARAM 32 位 值 , 作 为 参 数 传 递 给 一 个 窗 口 过 程 或 者 回
调 函 数 。
-
LPCSTR 指 向 字 符 串 常 量 的 32 位 指 针 。
-
LPSTR 指 向 字 符 串 的 32 位 指 针 。
-
LPCTSTR 指 向 一 个 兼 容 Unicode 和 DBCS 的 字 符 串 的 32 位 指 针
。
-
LPTSTR 指 向 一 个 兼 容 Unicode 和 DBCS 的 字 符 串 的 32 位 指 针
。
-
LPVOID 指 向 一 个 未 指 定 类 型 的 32 位 指 针 。
-
LRESULT 窗 口 过 程 或 者 回 调 函 数 返 回 的 32 位 值 。
-
UINT 在 W indows 3.0 和 3.1 中 表 示 16 位 的 无 符 号 整 数 , 在 W
in32 中 表示 32 位 的 无 符 号 整 数 。
-
WNDPROC 指 向 一 个 窗 口 过 程 的 32 位 指 针 。
-
WORD 16 位 无 符 号 整 数 。
-
W P A R A M 作 为 参 数 传 递 给 窗 口 函 数 或 者 回 调 函 数 的 值
: 在 W indows 3.0
和 3.1 中 为 16 位 , 在 W in32 中 为 32 位 。微 软 基 础 类 库 中 独 有 的 数 据 类 型 如 下 :
-
POSITION 用 于 标 记 集 合 中 一 个 元 素 的 位 置 的 值 ; 被 MFC
中 的 集 合 类 所使 用 。
-
LPCRECT 指 向 一 个 RECT 结 构 体 常 量 ( 不 能 修 改 ) 的 32 位
指 针 。
在 《 W in32 SDK 程 序 员 参 考 》 的 “ 数 据 类 型 ” 部 分 , 有 个 不 太 通 用 的 数 据 类型 的 列 表 。
MFC 类 对 象 的 强 制 类 型 转 换
强 制 类 型 转 换 宏 提 供 了 一 种 方 式 , 可 以 将 一 个 给 定 的 指 针 转 换 为 指 向 特 定 类 的对 象 的 指 针 , 并 不 需 要 检 查 这 种 转 换 是 否 合 法 。
下 面 的 表 格 列 出 了 MFC 中 的 强 制 类 型 转 换 宏 :
将 指 针 强 制 转 换 为 MFC 类 的 对 象 的 宏
DYNAMIC_DOWNCAST 将 一 个 指 针 转 换 为 指 向 一 个 对 象的 指 针 , 同 时 检 查 这 种 转 换 是 否合法
STATIC_DOWNCAST 将 指 向 一 个 类 的 对 象 的 指 针 转 换为 另 一 个 相 关 类 型 的 指 针 。 在 调试 版 本 中 , 如 果 该 对 象 不 能 转 换为 目 标 类 型 , 会 引 起 ASSERT
运 行 时 对 象 模 型 服 务
CObject 和 CRuntimeClass 这 两 种 类 封 装 了 一 些 对 象 服 务 , 包 括 对 运 行 时 对 象 信息 的 访 问 , 串 行 化 以 及 动 态 对 象 创 建 。 所 有 从 CObject 继 承 的 类 都 继 承 了 这 些功 能 。
通 过 访 问 运 行 时 对 象 信 息 , 你 可 以 在 运 行 时 决 定 对 象 的 信 息 。 当 你 需 要 额 外 的函 数 参 数 类 型 检 查 , 或 者 你 需 要 编 写 与 类 和 对 象 有 关 的 用 于 特 定 目 的 的 代 码时 , 这 种 在 运 行 时 决 定 对 象 信 息 的 能 力 非 常 有 用 。 C++ 语 言 本 身 并 不 直 接 支 持运 行 时 对 象 信 息 。
串 行 化 是 指 向 一 个 文 件 写 入 或 者 从 一 个 文 件 读 出 对 象 的 内 容 的 过 程 。 通 过 串 行化 , 你 即 使 在 应 用 程 序 退 出 以 后 也 还 可 以 保 存 对 象 的 信 息 。 当 应 用 程 序 重 新 启动 以 后 , 你 可 以 从 文 件 中 读 入 对 象 的 内 容 。 这 样 的 数 据 对 象 被 称 为 是 “ 永 久 性 ” 的 。
动 态 对 象 创 建 功 能 使 你 能 够 在 运 行 时 创 建 指 定 类 型 的 对 象 。 例 如 , 文 档 、 视 和框 架 对 象 必 须 支 持 动 态 创 建 , 因 为 应 用 框 架 必 须 动 态 地 创 建 它 们 。
下 面 的 表 格 列 出 了 支 持 运 行 时 类 信 息 、 串 行 化 和 动 态 创 建 的 MFC 宏。
如 果 需 要 关 于 运 行 时 对 象 服 务 和 串 行 化 的 更 详 细 的 信 息 , 可 以 参 考《 V isual C++
程 序 员 指 南 》 中 的 “ CObject 类 : 访 问 运 行 时 类 信 息 ” 部 分 。
运 行 时 对 象 模 式 服 务 宏
DECLARE_DYNAMIC 允 许 对 运 行 时 类 信 息 进 行 访 问 ( 必 须 在 类
定 义 中 使 用 )
DECLARE_DYNCREATE 允 许 动 态 创 建 和 访 问 运 行 时 类 信 息 ( 必 须
在 类 定 义 中 使 用 )
DECLARE_SERIAL 允 许 串 行 化 和 访 问 运 行 时 类 信 息 ( 必 须 在
类 定 义 中 使 用 )
IMPLEMENT_DYNAMIC 允 许 对 运 行 时 类 信 息 进 行 访 问 ( 必 须 在 类
的 实 现 中 使 用 )
IMPLEMENT_DYNCREATE 允 许 动 态 创 建 和 访 问 运 行 时 类 信 息 ( 必 须
在 类 的 实 现 中 使 用 )
IMPLEMENT_SERIAL 允 许 串 行 化 和 访 问 运 行 时 类 信 息 ( 必 须 在
类 的 实 现 中 使 用 )
RUNTIME_CLASS 返 回 与 指 定 名 字 的 类 对 应 的 CRuntimeClass
结构
OLE 经 常 需 要 在 运 行 时 动 态 地 创 建 对 象 。 例 如 , 一 个 OLE 服 务 器 必 须 能 够 在响 应 客 户 的 请 求 时 动 态 地 创 建 OLE 项 目 。 类 似 地 , 一 个 自 动 化 服 务 器 也 必 须能 够 在 响 应 自 动 化 客 户 的 请 求 时 动 态 地 创 建 项 目 。
微 软 基 础 类 库 特 别 为 OLE 提 供 了 两 个 宏 。
OLE Objects 的 动 态 创 建
DELCARE_OLECREATE 允 许 通 过 OLE 自 动 化 创 建 对 象
IMPLEMENT_OLECREATE 允 许 由 OLE 系 统 创 建 对 象
诊 断 服 务
微 软 基 础 类 库 支 持 许 多 诊 断 服 务 功 能 , 这 会 使 你 的 调 试 工 作 更 加 简 单 。 这 些 诊断 服 务 包 括 一 些 宏 和 全 局 函 数 , 它 们 允 许 你 跟 踪 程 序 的 内 存 分 配 , 在 运 行 时 转储 对 象 的 内 容 及 在 运 行 时 打 印 调 试 信 息 。 这 些 用 于 诊 断 服 务 的 宏 和 全 局 函 数 可以 组 成 以 下 几 个 类 别 :
-
通 用 诊 断 宏 。
-
通 用 诊 断 函 数 和 变 量 。
-
对 象 诊 断 函 数 。
在 MFC 的 调 试 和 发 行 版 本 中 , 所 有 从 CObject 继 承 的 类 都 可 以 使 用 这 些 宏 和函 数 。 但 是 , 除 了 DEBUG_NEW 和 VERIFY 以 外 , 其 他 的 在 发 行 版 本 中 都 不起 任 何 作 用 。
在 调 试 版 本 的 类 库 中 , 所 有 被 分 配 的 内 存 块 都 包 含 一 部 分 “ 保 护 字 节 ” 。 如 果
这 些 字 节 被 非 正 常 的 内 存 读 写 所 扰 乱 , 诊 断 例 程 就 会 报 告 出 问 题 。 如 果 你 在 程序 文 件 中 包 含 了 如 下 的 程 序 行 :
#define new DEBUG_NEW
所 有 对 new 的 调 用 将 保 存 了 产 生 内 存 分 配 的 文 件 名 和 行 号 。 函 数CMemoryState::Dum p- A llObjectsSince 将 会 显 示 这 些 附 加 信 息 , 使 你 能 够 识 别内 存 泄 漏 。 同 时 还 可 以 参 考 CDumpContext 类 在 诊 断 输 出 中 给 出 的 附 加 信 息 。
另 外 , C 运 行 时 库 同 样 支 持 一 个 诊 断 函 数 集 , 你 可 以 利 用 它 来 调 试 程 序 。 如 果需 要 获 得 更 多 的 信 息 ,请 参 阅《 M icrosoft Visual C++ 6.0 库 参 考 》中 的《 M icrosoft V isual C++ 6.0 运 行 库 参 考 》 一 卷 中 的 “ 诊 断 例 程 ” 一 文 。
MFC 通 用 调 试 宏
ASSERT 在 调 试 版 本 的 库 中 , 如 果 指 定 的 表 达 式 计 算 结 果 为
FALSE , 则 打 印 出 一 条 消 息 , 然 后 退 出 程 序
ASSERT_KINDOF 测 试 一 个 对 象 是 否 属 于 一 个 指 定 的 类 或 者 从 指 定 类 继承 而 来 的 类
ASSERT_VALID 调 用 对 象 的 AssertValid 成 员 函 数 测 试 对 象 的 内 部 完 整性 ; 通 常 由 CObject 继 承 而 来
DEBUG_NEW 在 调 试 模 式 下 提 供 所 有 对 象 分 配 的 文 件 名 和 行 号 以 帮助 发 现 内 存 泄 漏
TRACE 在 类 库 的 调 试 版 本 中 提 供 了 类 似 printf 的 功 能
TRACE0 与 TRACE 类 似 , 但 是 接 受 的 格 式 字 符 串 不 包 括 参 数
TRACE1 |
与 | TRACE | 类 似 , 但 是 接 受 的 格 式 字 符 串 只 包 括 一 个 |
---|---|---|---|
TRACE2 |
参 与 |
数 TRACE |
类 似 , 但 是 接 受 的 格 式 字 符 串 只 包 括 两 个 |
参 |
数 |
||
TRACE3 |
与 | TRACE | 类 似 , 但 是 接 受 的 格 式 字 符 串 只 包 括 三 个 |
参 数
VERIFY 与 ASSERT 类 似 , 但 是 在 Release 版 本 中 也 象 Debug
版 本 一 样 计 算 表 达 式 的 值
MFC 通 用 诊 断 变 量 和 函 数
afxDump 全 局 变 量 , 将 CdumpContext 信 息 发 送 的 调试 器 输 出 窗 口 或 者 调 试 终 端
afxMemDF 全 局 变 量 , 控 制 着 调 试 内 存 分 配 器 的 特 性
afxTraceEnabled 全 局 变 量 , 用 于 开 放 或 者 禁 止 TRACE 宏 的输出
afxTraceFlags 全 局 变 量 , 用 于 打 开 MFC 内 建 的 报 告 特 性
AfxCheckError 全 局 变 量 , 用 于 测 试 传 送 的 SCODE , 检 查是 否 是 错 误 , 如 果 是 , 抛 出 适 当 的 错 误
AfxCheckMemory 检 查 当 前 分 配 的 所 有 内 存 的 完 整 性
AfxDump 如 果 在 调 试 器 内 调 用 , 则 在 调 试 时 转 储 对 象的 状 态
AfxDumpStack 生 成 当 前 栈 的 一 个 图 象 。 这 个 函 数 通 常 被 静态 连 接
AfxEnableMemoryTracking 打 开 或 关 闭 内 存 跟 踪
AfxIsMemoryBlock 检 验 一 个 内 存 块 是 否 被 正 确 地 分 配AfxIsValidAddress 检 验 一 个 内 存 地 址 是 否 属 于 程 序 的 地 址 范 围AfxIsValidString 检 验 一 个 指 向 字 符 串 的 指 针 是 否 有 效AfxSetAllocHook 允 许 在 每 次 进 行 内 存 分 配 时 调 用 一 个 函 数
MFC 对 象 诊 断 函 数
AfxDoForAllClasses 对 所 有 从 CObject 继 承 的 支 持 运 行 时 类 型 检
查 的 类 执 行 一 个 指 定 的 功 能
AfxDoForAllObjects 对 所 有 从 CObject 继 承 的 用 new 分 配 内 存 的
对 象 执 行 一 个 指 定 的 功 能
异 常 处 理
在 程 序 执 行 的 过 程 中 , 可 能 会 发 生 一 些 称 为 “ 异 常 ” 的 非 正 常 状 态 或 者 错 误 。这 些 异 常 可 能 包 括 内 存 耗 尽 , 资 源 分 配 错 误 或 是 找 不 到 文 件 等 。
微 软 基 础 类 库 中 采 用 的 异 常 处 理 模 式 和 ANSI 标 准 化 委 员 会 建 议 的 C++ 异 常 处
理 方 式 很 接 近 。 异 常 处 理 函 数 必 须 在 调 用 可 能 发 生 不 正 常 状 态 的 函 数 之 前 建立 。 如 果 这 个 函 数 遇 到 了 不 正 常 的 状 态 , 它 就 抛 出 一 个 异 常 , 并 且 将 控 制 权 转移 给 异 常 处 理 函 数 。
微 软 基 础 类 库 中 包 含 的 某 些 宏 可 以 建 立 异 常 处 理 函 数 。 另 有 一 些 全 局 函 数 有 助于 抛 出 异 常 并 在 必 要 时 终 止 程 序 。 这 些 宏 和 全 局 函 数 可 以 分 为 以 下 几 类 :
-
异 常 宏 , 生 成 异 常 处 理 函 数 的 结 构 。
-
异 常 抛 出 函 数 , 生 成 特 定 类 型 的 异 常 。
-
终 止 函 数 , 使 程 序 终 止 。
如 果 需 要 示 例 和 更 多 的 细 节 , 请 参 阅 《 Visual C++ 程 序 员 指 南 》 中 的 “ 异 常 ” 部 分 。
异常 宏
TRY CATCH |
声 明 一 段 代 码 为 异 常 处 理 声 明 一 段 代 码 , 用 于 捕 捉 前 面 的一 个 异 常 |
TRY | 块 产 生 的 |
---|---|---|---|
CATCH_ALL |
声 明 一 段 代 码 , 用 于 捕 捉 前 面 的 |
TRY | 块 产 生 的 |
AND_CATCH |
所 有 异 常 声 明 一 段 代 码 , 用 于 捕 捉 前 面 的 |
TRY | 块 产 生 的 |
其 他 类 型 的 异 常 |
|||
AND_CATCH_ALL |
声 明 一 段 代 码 , 用 于 捕 捉 前 面 的 |
TRY | 块 抛 出 的 |
所 有 其 他 类 型 的 异 常 |
续 表END_CATCH 结 束 上 一 个 CATCH 或 AND_CATCH 块END_CATCH_ALL 结 束 上 一 个 CATCH_ALL 代 码 块
THROW 抛 出 一 个 指 定 的 异 常
THROW_LAST 抛 出 当 前 处 理 的 异 常 , 交 给 后 面 的 处 理 函 数
异 常 抛 出 函 数
AfxThrowArchiveException 抛 出 一 个 档 案 异 常AfxThrowFileException 抛 出 一 个 文 件 异 常AfxThrowMemoryException 抛 出 一 个 内 存 异 常AfxThrowNotSupportedException 抛 出 一 个 不 支 持 的 异 常AfxThrowResourceException 抛 出 一 个 W indows 的 未 找 到 资 源 异 常AfxThrowUserException 在 用 户 初 始 化 的 程 序 动 作 中 抛 出 一 个
异 常
MFC 特 别 为 OLE 异 常 提 供 了 两 个 异 常 抛 出 函 数 。
OLE 异 常 函 数
AfxThrowOleDispatchException 在 OLE 自 动 化 函 数 内 抛 出 一 个 异 常
AfxThrowOleException 抛 出 一 个 OLE 异 常
为 了 支 持 数 据 库 异 常 , 数 据 库 类 提 供 了 两 个 异 常 类 , CDBException 和
CDaoException , 还 有 一 些 全 局 函 数 用 于 支 持 异 常 类 型 :
DAO 异 常 函 数
AfxThrowDAOException 从 你 自 己 的 代 码 中 抛 出 一 个 CDaoException 异
常
AfxThrowDBException 从 你 自 己 的 代 码 中 抛 出 一 个 CDBException 异 常
MFC 提 供 了 下 列 终 止 函 数 :
终止函 数
AfxAbort 当 发 生 了 致 命 错 误 时 用 于 结 束 应 用 程 序
请 参 阅 CException
CString 格 式 化 和 消 息 框 显 示
有 一 些 函 数 被 用 于 格 式 化 和 处 理 CString 对 象 。 不 论 何 时 你 需 要 操 作 CString 对象 , 你 都 可 以 利 用 这 些 函 数 , 但 是 在 格 式 化 将 被 显 示 在 消 息 框 中 的 文 本 时 , 这些 函 数 特 别 有 用 。
这 组 函 数 中 同 时 还 包 括 了 用 于 显 示 消 息 框 的 全 局 例 程 。
CString 函数
AfxFormatString1 用 一 个 字 符 串 替 换 给 定 字 符 串 中 的 格 式 字 符 “ % 1 ”
AfxFormatString2 用 两 个 字 符 串 替 换 给 定 字 符 串 中 的 两 个 格 式 字 符“ % 1 ” 和 “ % 2 ”
AfxMessageBox 显 示 一 个 消 息 框
请 参 阅 CString
应 用 程 序 信 息 和 管 理
当 你 编 写 一 个 应 用 程 序 的 时 候 , 要 创 建 一 个 从 C W inApp 继 承 而 来 的 对 象 。 此时 , 可 能 你 希 望 从 这 个 对 象 的 外 部 获 取 它 的 有 关 信 息 。
微 软 基 础 类 库 提 供 了 下 列 全 局 函 数 , 用 以 帮 助 你 完 成 这 些 任 务 :
应 用 程 序 信 息 和 管 理 函 数
AfxFreeLibrary 减 少 已 调 入 内 存 的 动 态 链 接 库 ( DLL ) 模 块 的
引 用 计 数 , 当 引 用 计 数 减 到 0 时 , 这 个 模 块 就会 被 释 放
AfxGetApp 返 回 应 用 程 序 中 唯 一 的 C W inApp 对 象 的 指 针AfxGetAppName 返 回 一 个 包 含 应 用 程 序 名 字 的 字 符 串AfxGetInstanceHandle 返 回 一 个 代 表 应 用 程 序 实 例 的 HINSTANCE 变
量
AfxGetMainWnd 返 回 指 向 非 OLE 应 用 程 序 的 当 前 主 窗 口 的 指
针 , 或 者 是 服 务 器 程 序 的 现 场 框 架 窗 口
AfxGetResourceHandle 返 回 代 表 应 用 程 序 的 缺 省 资 源 的 HINSTANCE
变 量 。 可 以 利 用 它 来 直 接 访 问 应 用 程 序 的 资 源
AfxInitRichEdit 为 应 用 程 序 初 始 化 RichEdit 控 件 , 如 果 公 共 控
件 库 还 没 有 被 初 始 化 , 则 初 始 化 公 共 控 件 库
AfxLoadLibrary 调 入 一 个 DLL 模 块 , 同 时 返 回 一 个 句 柄 , 可
以 通 过 它 来 得 到 DLL 函 数 的 地 址
AfxRegisterWndClass 注 册 一 个 W indows 的 窗 口 类 ,用 它 来 替 换 MFC
自 动 注 册 的 窗 口 类
AfxSocketInit 在 CwinApp::InitInstance 的 重 载 函 数 中 调 用 , 用 它 来 初 始 化 W indows 的 Socket 协 议
AfxSetResourceHandle 设 置 指 向 应 用 程 序 调 入 的 缺 省 资 源 的 句 柄AfxRegisterClass 在 使 用 MFC 的 DLL 中 注 册 一 个 窗 口 类AfxBeginThread 创 建 一 个 新 的 线 程
AfxEndThread 结 束 当 前 线 程
AfxGetThread 获 得 指 向 当 前 CwinThread 对 象 的 指 针
AfxWinInit 由 MFC 提 供 的 W inMain 函 数 调 用 , 是 基 于 G U I 的 应 用 程 序 中 CwinApp 初 始 化 的 一 部 分 , 用于 初 始 化 MFC 。 在 使 用 MFC 的 控 制 台 程 序 中必 须 直 接 调 用
请 参 阅 C w inApp
标 准 命 令 和 窗 口 Ids
微 软 基 础 类 库 在 AFXRES.H 中 定 义 了 一 系 列 标 准 的 命 令 和 窗 口 ID 。 这 些 ID 通常 在 资 源 编 辑 器 中 使 用 , ClassWizard 也 使 用 它 们 来 将 消 息 映 射 到 你 的 处 理 函数 。 所 有 的 标 准 命 令 都 带 有 ID _ 前 缀 。 例 如 , 当 你 使 用 菜 单 编 辑 器 的 时 候 , 你通 常 会 将 文 件 菜 单 中 的 打 开 菜 单 项 与 标 准 的 ID_FILE_OPEN 命 令 ID 绑 定 在 一起 。
对 于 大 多 数 标 准 命 令 , 应 用 程 序 不 需 要 引 用 其 命 令 ID , 因 为 应 用 框 架 本 身 在 它的 框 架 类 (CwinThread, CwinApp, Cview, Cdocument 等 等 ) 的 消 息 映 射 中 处 理 了这 些 命 令 。
除 了 这 些 标 准 的 命 令 ID 以 外 , 还 定 义 了 一 些 以 AFX_ID 为 前 缀 的 标 准 ID 。 这些 ID 包 括 标 准 的 窗 口 ID (以 AFX_IDW 为 前 缀 ) , 字 符 串 ID ( 以 AFX_IDS_ 为 前 缀 ) , 以 及 其 他 几 种 类 型 。
以 AFX_ID 为 前 缀 的 ID 很 少 由 程 序 员 使 用 , 但 是 当 你 需 要 重 载 那 些 引 用 了
AFX_ID 的 框 架 函 数 的 时 候 , 你 可 能 需 要 引 用 这 些 ID 。
这 儿 并 不 单 独 描 述 这 些 ID 。 在 技 术 注 释 文 档 的 第 20 , 21 和 22 篇 中 , 你 可 以 找
到 更 详 细 的 有 关 信 息 。
注意 FXWIN.H 中 并 不 直 接 包 含 头 文 件 AFXRES.H 。 你 必 须 在 你 的 应 用 程序 的 资 源 描 述 文 件 ( .RC ) 中 明 确 地 包 含 下 列 语 句 :
#include afxres.h
集 合 类 帮 助 函 数
集 合 类 Cmap , Clist 以 及 Carray 使 用 了 一 些 全 局 的 模 板 函 数 来 完 成 诸 如 构 造 、析 构 和 串 行 化 元 素 等 功 能 。 在 你 实 现 由 Cmap , Clist 以 及 Carray 继 承 而 来 的 类时 , 你 必 须 重 载 这 些 函 数 以 适 应 在 你 的 映 射 、 链 表 、 数 组 中 保 存 的 数 据 类 型 。如 果 需 要 获 得 有 关 重 载 ConstructElements , DestructElements 以 及SerializeElements 的 更 多 信 息 , 请 参 阅 下 述 文 档 《 V isual C++ 程 序 员 指 南 》 中的 “ 如 何 生 成 类 型 安 全 的 集 合 ” 。
微 软 基 础 类 库 中 提 供 了 下 列 全 局 函 数 来 帮 助 你 定 制 集 合 类 :
集 合 类 帮 助 函 数
CompareElements 指 出 元 素 是 否 相 同
ConstructElements 当 生 成 一 个 元 素 时 完 成 必 要 的 动 作CopyElements 将 元 素 从 一 个 数 组 中 复 制 到 另 一 个 数 。DestructElements 当 销 毁 一 个 元 素 时 完 成 必 要 的 动 作
续 表
DumpElements 提 供 了 面 向 流 的 诊 断 输 出
HashKey 计 算 一 个 Hash 键
SerializeElements 将 元 素 保 存 在 档 案 中 , 或 者 从 档 案 中 获 得 元 素
请 参 阅 C M ap, CList, CArray
记 录 字 段 交 换 函 数
这 个 主 题 列 出 了 记 录 字 段 交 换 函 数 (RFX, Bulk RFX, 以及 DFX) , 它 们 被 用 于自 动 完 成 在 记 录 集 对 象 和 它 的 数 据 源 之 间 的 数 据 传 送 , 同 时 还 能 执 行 对 数 据 的一 些 操 作 。
如 果 你 正 在 使 用 基 于 ODBC 的 类 , 并 且 你 已 经 实 现 了 多 行 记 录 成 组 获 取 , 你 一定 手 动 重 载 了 CRecordset 的 成 员 函 数 DoBulkFieldExchange, 在 其 中 对 与 数 据源 中 的 每 一 个 列 相 对 应 的 数 据 成 员 调 用 了 成 组 RFX 函 数 。
如 果 你 的 基 于 ODBC 的 类 中 还 没 有 实 现 多 行 记 录 成 组 获 取 , 或 者 你 使 用 的 是 基于 DAO 的 类 , 那 么 ClassWizard 将 会 重 载 CRecordset 或 CDaoRecordset 的成 员 函 数 DoFieldExchange , 在 其 中 对 你 的 记 录 集 中 的 每 个 数 据 字 段 成 员 调 用RFX 函 数 ( 如 果 是 ODBC 类 ) 或 者 DFX 函 数 ( 如 果 是 DAO 类 ) 。
当 框 架 每 一 次 调 用 DoFieldExchange 或者 DoBulkFieldExchange 的 时 候 , 记 录 字段 交 换 函 数 就 传 送 一 次 数 据 。 每 个 函 数 传 送 一 种 特 定 类 型 的 数 据 。
如 果 需 要 获 得 有 关 如 何 使 用 这 些 函 数 的 更 详 细 的 说 明 , 可 以 参 阅 “ 记 录 字 段 交换 : RFX 如 何 工 作 ” ; 或 者 “ DAO 记 录 字 段 交 换 : DFX 如 何 工 作 ” 。 如 果 需要 有 关 成 组 记 录 获 取 的 更 详 细 的 信 息 , 可 以 参 阅 下 述 文 章 : “ 成 组 记 录 获 取
( ODBC ) ” 。 这 些 文 章 可 以 在 《 Visual C++ 程 序 员 指 南 》 中 找 到 。
对 于 动 态 绑 定 的 数 据 列 , 你 也 可 以 自 己 调 用 RFX 或 DFX 函 数 , 而 不 是 利 用ClassWizard , 在 “ Recordset : 动 态 绑 定 数 据 列 ( ODBC ) ” 和 “ DAO : 动 态 绑定 记 录 ” 中 对 此 作 了 解 释 。 这 些 文 章 可 以 在 《 V isual C++ 程 序 员 指 南 》 中 找 到 。注 意 , 在 DAO 中 动 态 绑 定 数 据 与 ODBC 中 的 动 态 绑 定 有 所 不 同 。 另 外 , 你 也可 以 编 写 自 己 的 RFX 或 DFX 例 程 , 在 技 术 注 释 文 档 的 第 43 篇 ( 针 对 ODBC ) 和 第 53 篇 ( 针 对 DAO ) 中 对 此 作 了 解 释 。
如 果 需 要 获 得 在 DoFieldExchange 和 DoBulkFieldExchange 中 使 用 RFX 和 DFX 函 数 的 例 子 , 可 以 参 看 RFX_Text 和 RFX_Text_Bulk 。 DFX 函 数 与 RFX 函 数十 分 类 似 。
RFX 函 数 (ODBC)
RFX_Binary 传送 CByteArray 类 型 的 字 节 数
RFX_Bool 传 送 布 尔 数 据
RFX_Byte 传 送 单 个 的 字 节 数 据
续 表
RFX_Date 传送 CTime 或 TIMESTAMP_STRUCT 类 型 的 时 间 和日 期 数 据
RFX_Double 传 送 双 精 度 浮 点 数 据
RFX_Int 传 送 整 型 数 据
RFX_Long 传 送 长 整 型 数 据
RFX_LongBinary 通 过 CLongBinary 类 的 对 象 传 送 二 进 制 大 对 象
( BLOB ) 数 据
RFX_Single 传 送 浮 点 数 据
RFX_Text 传 送 字 符 串 数 据
Bul k RF X 函 数 (ODBC )
RFX_Binary_Bulk 传 送 二 进 制 数 据 的 数 组
RFX_Bool_Bulk 传 送 布 尔 数 据 的 数 组
RFX_Byte_Bulk 传 送 字 节 数 据 的 数 组
RFX_Date_Bulk 传 送 TIMESTAMP_STRUCT 类 型 数 据 的 数 组
RFX_Double_Bulk 传 送 双 精 度 浮 点 数 据 的 数 组
RFX_Int_Bulk 传 送 整 型 数 据 的 数 组
RFX_Long_Bulk 传 送 长 整 型 数 据 的 数 组
RFX_Single_Bulk 传 送 浮 点 数 据 的 数 组
RFX_Text_Bulk 传 送 LPSTR 类 型 数 据 的 数 组
DFX 函 数 (DAO)
DFX_Binary 传送 CByteArray 类 型 的 字 节 数 组
DFX_Bool 传 送 布 尔 型 数 据
DFX_Byte 传 送 单 个 字 节 数 据
DFX_Currency 传送 COleCurrency 类 型 的 货 币 数 据DFX_DateTime 传送 COleDateTime 类 型 的 时 间 和 日 期 数 据DFX_Double 传 送 双 精 度 浮 点 数 据
DFX_Long 传 送 长 整 型 数 据
DFX_LongBinary 通 过 CLongBinary 类 的 对 象 传 送 大 二 进 制 对 象
( BLOB ) 数 据 , 对 于 DAO , 推 荐 你 使 用 DFX_Binary
DFX_Short 传 送 短 整 型 数 据
DFX_Single 传 送 浮 点 数 据
DFX_Text 传 送 字 符 串 数 据 。
请 参 阅
Recordset::DoFieldExchange, CRecordset::DoBulkFieldExchange,CDaoRecordset:: DoFieldExchange
CRecordView 和 CDaoRecordView 的 对 话 框 数 据 交 换 函 数
这 个 主 题 列 出 了 用 于 在 CRecordset 和 CRecordView 表 格 之 间 或 是 CDaoRecordset
与 CDaoRecordView 表 格 之 间 交 换 数 据 的 DDX_Field 函 数 。
重要 DDX_Field 函 数 与 DDX 函 数 类 似 , 它 们 都 是 与 表 格 中 的 控 件 交 换数 据 。 但 是 与 DDX 函 数 不 同 的 是 , 它 们 与 和 视 窗 相 关 的 记 录 集 对 象 的 字段 交 换 数 据 , 而 不 是 与 记 录 视 窗 本 身 的 字 段 进 行 交 换 。 如 果 要 获 得 更 多的 信 息 ,请 参 阅 CRecordView 和 CDaoRecordView 类 ,或 者 参 考《 Visual C++ 程 序 员 指 南 》 中 的 “ ClassWizard : 将 表 格 控 件 映 射 到 记 录 集 的 字 段 ” 。
DDX_Field 函数
DDX_FieldCBIndex 在 记 录 集 字 段 的 数 据 成 员 和 CRecordView 或
CDaoRecordView 中 组 合 框 的 当 前 选 择 索 引 之 间 交 换整 数 数 据
DDX_FieldCBString 在 记 录 集 字 段 的 数 据 成 员 和 CrecordView 或
CDaoRecordView 中 组 合 框 的 编 辑 控 件 之 间 交 换CString 数 据 。 当 从 记 录 集 向 控 件 传 送 数 据 的 时 候 , 这 个 函 数 将 选 择 组 合 框 中 以 给 定 字 符 串 中 的 字 符 开头 的 项
DDX_FieldCBString Exact
在 记 录 集 字 段 的 数 据 成 员 和 CRecordView 或CDaoRecordView 中 组 合 框 的 编 辑 控 件 之 间 交 换CString 数 据 。 当 从 记 录 集 向 控 件 传 送 数 据 的 时 候 , 这 个 函 数 将 选 择 组 合 框 中 严 格 匹 配 给 定 字 符 串 的 项
DDX_FieldCheck 在 记 录 集 字 段 的 数 据 成 员 和 CRecordView 或
CdaoRecordView 中 复 选 框 之 间 交 换 布 尔 型 数 据
DDX_FieldLBIndex 在 记 录 集 字 段 的 数 据 成 员 和 CRecordView 或
CDaoRecordView 中 列 表 框 的 当 前 选 择 索 引 之 间 交换 整 型 数 据
DDX_FieldLBString 管 理 在 记 录 集 的 字 段 数 据 成 员 和 列 表 框 控 件 之 间 的
CString 数 据 的 传 送 。 当 数 据 是 从 记 录 集 传 送 到 控 件时 , 这 个 函 数 将 选 择 列 表 框 中 以 给 定 字 符 串 中 字 符开 头 的 项
DDX_FieldLBString Exact
管 理 在 记 录 集 的 字 段 数 据 成 员 和 列 表 框 控 件 之 间 的CString 数 据 的 传 送 。 当 数 据 是 从 记 录 集 传 送 到 控 件时 , 这 个 函 数 将 选 择 列 表 框 中 严 格 匹 配 给 定 字 符 串的 项
DDX_FieldRadio 在 记 录 集 的 字 段 数 据 成 员 和 CRecordView or
CDaoRecordView 中 的 一 组 单 选 控 件 之 间 传 送 整 数 数据
DDX_FieldScroll 设 置 或 获 得 CrecordView or CDaoRecordView 中 滚 动
条 控 件 的 位 置 。 在 你 的 DoFieldExchange 函 数 中 调 用
DDX_FieldText 对 于 在 记 录 集 的 字 段 数 据 成 员 和 CRecordView or
CDaoRecordView .中 的 编 辑 框 之 间 传 送 数 据 , 可 以 获得 对 应 各 种 类 的 重 载 函 数 ,包 括 int 整 型 ,UINT ,long 型 , DWORD , CString , float , double , short , COleDateTime 以及 COleCurrency 等
OLE 控 件 中 的 对 话 框 数 据 交 换
这 个 主 题 列 出 了 用 于 在 对 话 框 、 表 格 视 或 控 制 视 对 象 中 的 OLE 控 件 的 属 性 与对 话 框 、 表 格 视 或 控 制 视 对 象 的 数 据 成 员 之 间 交 换 数 据 的 DDX_OC 函 数 。
DDX_OC 函 数
DDX_OCBool 管 理 在 OLE 控 件 的 属 性 与 布 尔 型 数 据 成 员 之 间 的 布 尔数 据 传 送
DDX_OCBoolRO 管 理 在 OLE 控 件 的 只 读 属 性 与 布 尔 型 数 据 成 员 之 间 的布 尔 数 据 传 送
DDX_OCColor 管 理 在 OLE 控 件 的 属 性 与 OLE_COLOR 数 据 成 员 之间的 OLE_COLOR 数 据 传 送
DDX_OCColorRO 管 理 在 OLE 控 件 的 只 读 属 性 与 OLE_COLOR 数 据 成员 之 间 的 OLE_COLOR 数 据 传 送
DDX_OCFloat 管 理 在 OLE 控 件 的 属 性 与 float 浮点 ( 或 double 双 精度 ) 数 据 成 员 之 间 的 浮 点 ( 或 双 精 度 ) 数 据 传 送
DDX_OCFloatRO 管 理 在 OLE 控 件 的 只 读 属 性 与 浮 点 ( 或 双 精 度 ) 数 据成 员 之 间 的 浮 点 ( 或 双 精 度 ) 数 据 传 送
DDX_OCInt 管 理 在 OLE 控 件 的 属 性 与 int 整 型 (或 long 长 整 型 ) 数 据 成 员 之 间 的 整 型 ( 或 长 整 型 ) 数 据 传 送
DDX_OCIntRO 管 理 在 OLE 控 件 的 只 读 属 性 与 整 型 ( 或 长 整 型 ) 数 据成 员 之 间 的 整 型 ( 或 长 整 型 ) 数 据 传 送
DDX_OCShort 管 理 在 OLE 控 件 的 属 性 与 short 短 整 型 数 据 成 员 之 间的 短 整 型 数 据 传 送
DDX_OCShortRO 管 理 在 OLE 控 件 的 只 读 属 性 与 短 整 型 数 据 成 员 之 间 的短 整 型 数 据 传 送
DDX_OCText 管 理 在 OLE 控 件 的 属 性 与 CString 数 据 成 员 之 间 的
CString 数 据 传 送
DDX_OCTextRO 管 理 在 OLE 控 件 的 只 读 属 性 与 CString 数 据 成 员 之 间的 Cstring 数 据 传 送
数 据 库 宏 和 全 局 函 数 、 变 量
这 里 列 出 的 宏 使 用 于 基 于 ODBC 的 数 据 库 应 用 程 序 。 它 们 不 应 在 基 于 D A O 的应 用 程 序 中 使 用 。
直 到 MFC4.2 之 前 , AFX_SQL_ASYNC 和 AFX_SQL_SYNC 宏 使 异 步 操 作 有机 会 向 其 它 操 作 让 出 时 间 。 从 MFC4.2 开 始 , 这 些 宏 的 实 现 方 式 有 了 变 化 , 因为 现 在 MFC 的 ODBC 类 只 使 用 同 步 操 作 。 MFC4.2 中 的 AFX_ODBC_CALL 宏是 新 的 。
EDDX_OC 函 数
数据库宏
AFX_ODBC_CALL 利 用 这 个 宏 来 调 用 一 个 返 回
SQL_STILL_EXECUTING 的 ODBC AP I , 它 会 反 复
调 用 这 个 函 数 直 到 它 不 再 返 回
SQL_STILL_EXECUTING
AFX_SQL_ASYNC 仅 仅 是 简 单 地 调 用 AFX_ODBC_CALL AFX_SQL_SYNC 利 用 这 个 宏 来 调 用 一 个 不 返 回
SQL_STILL_EXECUTING 的 ODBC API
数 据 库 全 局 函 数
AfxGetHENV 利 用 这 个 全 局 函 数 来 获 得 MFC 当 前 使 用 的 ODBC 环境 的 句 柄 。 你 可 以 在 直 接 ODBC 调 用 时 使 用 这 个 句 柄
DAO 数 据 库 引 擎 的 初 始 化 和 终 止
当 你 使 用 MFC 的 DAO 对 象 时 , 必 须 首 先 初 始 化 DAO 数 据 库 引 擎 , 在 你 的 应用 程 序 或 者 DLL 退 出 前 , 必 须 终 止 数 据 库 引 擎 。 有 两 个 函 数 A fxDaoInit 和AfxDaoTerm 可 以 完 成 这 个 任 务 。
DAO 数 据 库 引 擎 初 始 化 和 终 止 函 数
AfxDaoInit 初 始 化 DAO 数 据 库 引 擎
AfxDaoTerm 终 止 DAO 数 据 库 引 擎
OLE 初 始 化
在 你 的 应 用 程 序 可 以 使 用 OLE 系 统 服 务 之 前 ,必 须 首 先 初 始 化 OLE 系统 DLL , 并 且 确 定 DLL 的 版 本 。 AfxOleInit 可 以 初 始 化 OLE 系 统 DLL 。
OLE 初 始 化
AfxOleInit 初 始 化 OLE 库
应 用 程 序 控 制
OLE 需 要 实 质 性 地 控 制 应 用 程 序 和 它 的 对 象 。 OLE 的 系 统 DLL 必 须 能 够 自 动地 启 动 、 释 放 应 用 程 序 , 协 调 它 们 的 产 物 以 及 对 象 的 修 改 , 等 等 。 这 个 主 题 中的 函 数 适 应 了 这 些 需 要 。 另 外 , 除 了 被 OLE 系 统 DLL 调 用 以 外 , 有 时 这 些 函数 必 须 由 应 用 程 序 自 己 调 用 。
应 用 程 序 控 制
AfxOleCanExitApp 指 出 应 用 程 序 是 否 能 够 结 束AfxOleGetMessageFilter 获 得 应 用 程 序 当 前 的 消 息 过 滤 器AfxOleGetUserCtrl 获 得 当 前 的 用 户 控 制 标 志AfxOleSetUserCtrl 设 置 或 清 除 用 户 控 制 标 志
AfxOleLockApp 增 加 应 用 程 序 中 活 动 对 象 的 全 局 计 数AfxOleUnlockApp 减 小 应 用 程 序 中 活 动 对 象 的 全 局 计 数AfxOleRegisterServerClass 在 OLE 系 统 注 册 表 中 注 册 一 个 服 务 器AfxOleSetEditMenu 实 现 typename Object 命 令 的 用 户 接 口
OLE 自 动 化 提 供 了 在 应 用 程 序 之 间 调 用 方 法 和 访 问 属 性 的 途 径 。 由 微 软 基 础 类库 提 供 的 调 度 这 些 请 求 的 机 制 称 为 “ 调 度 映 射 ” , 它 分 配 对 象 函 数 和 属 性 的 内部 、 外 部 名 字 , 同 时 还 分 配 属 性 本 身 和 函 数 参 数 的 数 据 类 型 。
调度映射
DECLARE_DISPATCH_MAP 声 明 将 使 用 一 个 调 度 映 射 来 揭 示 一 个 类 的
方 法 和 属 性 ( 必 须 用 于 类 声 明 中 ) BEGIN_DISPATCH_MAP 开 始 一 个 调 度 映 射 的 定 义END_DISPATCH_MAP 结 束 一 个 调 度 映 射 的 定 义 DISP_FUNCTION 用 于 调 度 映 射 中 , 以 定 义 一 个 OLE 自 动
化 函 数
DISP_PROPERTY 定 义 一 个 OLE 自 动 化 属 性
DISP_PROPERTY_EX 定 义 一 个 OLE 自 动 化 属 性 并 且 命 名 “ get ”
和 “ set” 函 数
DISP_PROPERTY_NOTIFY 为 一 个 OLE 自 动 化 属 性 定 义 通 知 消 息
DISP_PROPERTY_PARAM 定 义 一 个 带 参 数 的 OLE 自 动 化 属 性 , 并
且 命 名 了 “ ge t” 和 “ set” 函 数
DISP_DEFVALUE 将 一 个 现 存 的 属 性 设 置 为 一 个 对 象 的 缺 省
值
这 个 主 题 列 出 了 一 些 新 的 常 量 , 它 们 指 出 了 被 设 计 与 微 软 基 础 类 库 中 OLE 控件 类 一 起 使 用 的 variant 参 数 类 型 。
下 面 是 类 常 量 的 一 个 列 表 :
Variant 数 据 常 量
-
VTS_COLOR 用 于 表 示 R G B 颜 色 值 的 32 位 整 数
-
VTS_FONT 指 向 一 个 OLE 字 体 对 象 的 IFontDisp 接 口 的 指 针
-
VTS_HANDLE 一 个 W indows 句 柄 值
-
VTS_PICTURE 指 向 一 个 OLE 图 形 对 象 的 IPictureDisp 接 口 的 指
针
-
VTS_OPTEXCLUSIVE 一 个 16 位 值 , 用 于 成 组 使 用 的 控 件 , 比
如 单 选 按钮 。 这 个 类 型 告 诉 容 器 是 否 在 一 组 控 件 中 有 一 个 具 有 TRUE 值 , 而 其 它 的都是 FALSE
-
VTS_TRISTATE 一 个 16 位 带 符 号 整 数 , 用 于 可 能 具 有 三 个
可 能 值 ( 选中 、 未 选 中 、 变 灰 ) 的 属 性 , 例 如 , 复 选 框
-
VTS_XPOS_HIMETRIC 一个 32 位 无 符 号 整 数 值 , 用 于 表 示 x 轴
上 以
HIMETRIC 为 单 的 位 置 值
- VTS_YPOS_HIMETRIC 一个 32 位 的 无 符 号 整 数 值 , 用 于 表 示 y
轴 上 以
HIMETRIC 为 单 位 的 位 置 值
-
VTS_XPOS_PIXELS 一 个 32 位 无 符 号 整 数 值 , 用 于 表 示 x 轴
上 以 像 素为 单 位 的 位 置 值
-
VTS_YPOS_PIXELS 一 个 32 位 无 符 号 整 数 值 , 用 于 表 示 y 轴
上 以 像 素为 单 位 的 位 置 值
-
VTS_XSIZE_PIXELS 一 个 32 位 无 符 号 整 数 值 , 用 于 表 示 以
像 素 为 单 位的 屏 幕 对 象 的 宽 度
-
VTS_YSIZE_PIXELS 一 个 32 位 无 符 号 整 数 值 , 用 于 表 示 以
像 素 为 单 位的 屏 幕 对 象 的 高 度
-
VTS_XSIZE_HIMETRIC 一 个 32 位 无 符 号 整 数 值 , 用 于 表 示 以
HIMETRIC 为 单 位 的 屏 幕 对 象 的 宽 度
- VTS_YSIZE_HIMETRIC 一 个 32 位 无 符 号 整 数 值 , 用 于 表 示 以
HIMETRIC 为 单 位 的 屏 幕 对 象 的 高 度
注 意 另 外 还 为 所 有 的 variant 类 型 定 义 了 一 些 variant 常 量 , 除 了VTS_FONT 和 VTS_PICTURE , 它 们 提 供 了 一 个 指 向 variant 数 据 常 量 的 指针 。 这 些 常 量 以 VTS_ Pconstantname 约 定 来 命 名 。 例 如 , VTS_PCOLOR 是一 个 指 向 VTS_COLOR 常 量 的 指 针 。
访 问 类 型 库
类 型 库 揭 示 了 OLE 控 件 与 其 它 具 有 OLE 能 力 的 应 用 程 序 之 间 的 接 口 。如 果 OLE
控 件 需 要 提 供 一 个 或 多 个 接 口 , 它 必 须 具 有 一 个 类 型 库 。
下 面 列 出 的 宏 使 OLE 控 件 能 够 提 供 对 它 自 己 的 类 型 库 的 访 问 。
类 型 库 访 问
DECLARE_OLETYPELIB 定 义 了 OLE 控 件 的 GetTypeLib 成 员 函 数
( 必 须 在 类 定 义 中 使 用 )
IMPLEMENT_OLETYPELIB 实 现 了 OLE 控 件 的 GetTypeLib 成 员 函 数
( 必 须 在 类 实 现 中 使 用 )
属 性 页
属 性 页 用 可 定 制 的 图 形 接 口 显 示 特 定 OLE 控 件 的 属 性 的 当 前 值 , 通 过 支 持 基于 对 话 框 数 据 交 换 ( D D X ) 的 数 据 映 射 机 制 提 供 了 对 它 们 的 显 示 和 编 辑 手 段 。这 种 数 据 映 射 机 制 将 属 性 页 控 件 映 射 到 OLE 控 件 的 每 个 属 性 。 控 件 属 性 的 值反 映 了 属 性 页 的 状 态 或 内 容 。 属 性 页 控 件 和 属 性 之 间 的 这 种 映 射 由 在 属 性 页 的DoDataExchange 成 员 函 数 中 调 用 的 DDP_ 函 数 指 定 。 下 面 是 用 于 交 换 你 的 属 性
页 控 件 中 输 入 的 数 据 的 DDP_ 函 数 的 列 表 :
属 性 页 数 据 交 换
DDP_CBIndex 利 用 这 个 函 数 将 组 合 框 中 被 选 中 的 字 符 串 的 索 引 和
控 件 的 属 性 连 接 起 来
DDP_CBString 利 用 这 个 函 数 将 组 合 框 中 被 选 中 的 字 符 串 和 控 件 的
属 性 连 接 起 来 。 选 中 的 字 符 串 可 以 是 以 与 属 性 值 相同 的 字 母 开 始 的 , 但 是 并 不 需 要 完 全 匹 配
DDP_CBStringExact 利 用 这 个 函 数 将 组 合 框 中 被 选 中 的 字 符 串 与 控 件 的
属 性 连 接 起 来 。 选 中 的 字 符 串 与 属 性 的 字 符 串 值 必须 是 严 格 匹 配 的
DDP_Check 利 用 这 个 函 数 将 控 件 的 属 性 页 中 的 复 选 框 与 控 件 的
属 性 连 接 起 来
DDP_LBIndex 利 用 这 个 函 数 将 列 表 框 中 被 选 中 字 符 串 的 索 引 与 控
件 的 属 性 连 接 起 来
DDP_LBString 利 用 这 个 函 数 将 列 表 框 中 被 选 中 字 符 串 与 控 件 的 属
性 连 接 起 来 。 选 中 的 字 符 串 可 以 是 以 与 控 件 属 性 值相 同 的 字 母 开 始 的 , 但 是 并 不 需 要 完 全 匹 配
DDP_LBStringExact 利 用 这 个 函 数 将 列 表 框 中 被 选 中 的 字 符 串 与 控 件 的
属 性 连 接 起 来 。 被 选 中 的 字 符 串 和 属 性 的 字 符 串 值必 须 严 格 地 匹 配
DDP_PostProcessing 利 用 这 个 函 数 来 结 束 你 的 控 件 的 属 性 值 的 传 送
续 表
DDP_Radio 利 用 这 个 函 数 将 控 件 的 属 性 页 中 的 一 组 单 选 按 钮 与
控 件 的 属 性 连 接 起 来
DDP_Text 利 益 这 个 函 数 将 控 件 的 属 性 页 中 的 控 件 与 控 件 的 属
性 连 接 起 来 。 这 个 函 数 处 理 一 些 不 同 类 型 的 属 性 , 比 如 双 精 度 值 , 短 整 型 值 , BSTR 值 以 及 长 整 型 值 等
如 果 需 要 获 得 有 关 DoDataExchange 函 数 和 属 性 页 的 详 细 信 息 , 请 参 阅 《 V isual C++ 程 序 员 指 南 》 中 的 “ ActiveX 控 件 : 属 性 页 ” 一 文 。
下 面 是 用 来 为 OLE 控 件 创 建 和 管 理 属 性 页 的 宏 的 列 表 :
属性页
BEGIN_PROPPAGEIDS 开 始 一 个 属 性 页 ID 的 列 表END_PROPPAGEIDS 结 束 一 个 属 性 页 ID 的 列 表PROPPAGEID 声 明 一 个 控 件 类 的 属 性 页
事 件 映 射
不 论 何 时 , 如 果 一 个 控 件 想 要 通 知 它 的 容 器 , 有 些 动 作 ( 取 决 于 控 件 的 设 计 者 ) 已 经 发 生 ( 比 如 按 键 、 鼠 标 点 击 , 或 者 控 件 状 态 的 变 化 等 ) , 它 就 调 用 一 个 事件 引 发 的 函 数 。 这 个 函 数 通 过 产 生 相 应 的 事 件 来 通 知 控 件 的 容 器 一 些 重 要 的 动
作 已 经 产 生 了 。
微 软 基 础 类 库 提 供 了 一 种 为 事 件 引 发 而 优 化 的 编 程 模 式 。 在 这 种 模 式 中 , 使 用了 “ 事 件 映 射 ” 来 指 定 对 于 一 个 特 定 的 控 件 , 哪 个 函 数 引 发 哪 个 事 件 。 事 件 映射 中 为 每 个 事 件 包 含 了 一 个 宏 。 例 如 , 一 个 引 发 点 击 事 件 的 事 件 映 射 可 能 是 这样 的 :
BEGIN_EVENT_MAP(CSampleCtrl, COleControl)
//{{AFX_EVENT_MAP(CSampleCtrl) EVENT_STOCK_CLICK( )
//}}AFX_EVENT_MAP END_EVENT_MAP()
EVENT_STOCK_CLICK 宏 指 明 这 个 控 件 每 检 测 到 一 次 鼠 标 点 击 就 引 发 一 个 点击 事 件 。 如 果 要 获 得 其 它 预 定 事 件 的 详 细 列 表 , 请 参 阅 《 V isual C++ 程 序 员 指南 》 中 的 “ ActiveX 控 件 事 件 ” 一 文 。 还 要 一 些 宏 可 以 用 来 指 明 自 定 义 的 事 件 。
尽 管 事 件 映 射 宏 很 重 要 , 通 常 你 并 不 会 直 接 插 入 它 们 。 这 是 因 为 当 你 使 用 事 件映 射 将 事 件 引 发 的 函 数 与 事 件 联 系 起 来 时 , ClassWizard 会 在 你 的 源 代 码 中 自 动地 创 建 一 个 事 件 映 射 入 口 。 不 论 何 时 你 想 编 辑 或 者 添 加 事 件 映 射 入 口 , 你 都 可以 使 用 ClassWizard 。
为 了 支 持 事 件 映 射 , MFC 提 供 了 下 列 宏 :
事 件 映 射 定 义 和 分 界
DECLARE_EVENT_MAP 定 义 一 个 事 件 映 射 , 它 将 被 用 于 一 个 类 中 ,
将 事 件 映 射 到 一 个 事 件 引 发 的 函 数 ( 必 须 在类 定 义 中 使 用 )
BEGIN_EVENT_MAP 开 始 一 个 事 件 映 射 的 定 义 ( 必 须 在 类 的 实 现
中 使 用 )
END_EVENT_MAP 结 束 一 个 事 件 映 射 的 定 义 ( 必 须 在 类 的 实 现
中 使 用 )
事 件 映 射 宏 EVENT_CUSTOM 指 明 哪 个 事 件 引 发 函 数 将 引 发 特 定 的 事 件EVENT_CUSTOM_ID 指 明 哪 个 事 件 引 发 函 数 将 引 发 特 定 的 具 有 指 定 调
度 ID 的 事 件
消 息 映 射 宏
ON_OLEVERB 指 明 OLE 控 件 处 理 的 一 个 自 定 义 的 动 词
ON_STDOLEVERB 重 载 一 个 OLE 控 件 的 标 准 动 词 映 射
事 件 接 收 映 射
当 一 个 嵌 入 的 OLE 控 件 引 发 一 个 事 件 时 , 该 控 件 的 容 器 通 过 一 个 MFC 提 供 的称 为 “ 事 件 接 收 映 射 ” 的 机 制 接 收 事 件 。 这 种 事 件 接 收 映 射 为 每 个 特 定 的 事 件分 配 处 理 函 数 , 包 括 这 些 事 件 的 参 数 。 如 果 需 要 获 得 有 关 事 件 接 收 映 射 的 更 多的 信 息 , 请 参 阅 《 Visual C++ 程 序 员 指 南 》 中 的 “ ActiveX 控 件 容 器 ” 一 文 。
事 件 接 收 映 射 BEGIN_EVENTSINK_MAP 开 始 一 个 事 件 接 收 映 射 的 定 义DECLARE_EVENTSINK_MAP 定 义 一 个 事 件 接 收 映 射END_EVENTSINK_MAP 结 束 一 个 事 件 接 收 映 射 的 定 义ON_EVENT 为 特 定 的 事 件 指 定 一 个 事 件 处 理 函 数
ON_EVENT_RANGE 为 一 系 列 OLE 控 件 引 发 的 事 件 定 义 一个 事 件 处 理 函 数
ON_EVENT_REFLECT 在 被 控 件 的 容 器 处 理 之 前 接 收 控 件 所
引 发 的 事 件
ON_PROPNOTIFY 定 义 一 个 处 理 函 数 以 处 理 OLE 控 件 产生 的 属 性 通 知
ON_PROPNOTIFY_RANGE 定 义 一 个 处 理 函 数 以 处 理 一 个 OLE 控
件 集 合 产 生 的 属 性 通 知
ON_PROPNOTIFY_REFLECT 在 被 控 件 的 容 器 处 理 之 前 接 收 控 件 发
出 的 属 性 通 知
连 接 映 射
OLE 控 件 可 以 向 别 的 应 用 程 序 提 供 接 口 。 这 些 接 口 仅 允 许 容 器 对 控 件 进 行 访问 。 如 果 一 个 OLE 控 件 希 望 访 问 其 它 OLE 对 象 的 外 部 接 口 必 须 建 立 一 个 连 接点 。 这 个 连 接 点 允 许 一 个 控 件 访 问 外 部 的 调 度 映 射 , 比 如 事 件 映 射 或 通 知 函 数 。
微 软 基 础 类 库 提 供 了 支 持 这 种 连 接 点 的 编 程 模 式 。 在 这 种 模 式 中 , 利 用 “ 连 接映 射 ” 来 为 OLE 控 件 指 派 接 口 ( 或 者 连 接 点 ) 。 连 接 映 射 中 为 每 个 连 接 点 包含 了 一 个 宏 。 如 果 要 获 得 有 关 连 接 映 射 的 更 多 信 息 , 参 见 CConnectionPoint 类 。
典 型 的 情 况 是 , 一 个 控 件 将 仅 仅 支 持 两 个 连 接 点 : 一 个 用 于 事 件 , 一 个 用 于 属性 通 知 。 这 是 由 COleControl 基 类 实 现 的 , 并 且 不 需 要 控 件 的 编 写 者 再 作 什 么额 外 的 工 作 。 你 希 望 在 你 的 类 中 实 现 的 任 何 附 加 的 连 接 点 都 必 须 手 动 添 加 。 为了 支 持 连 接 映 射 和 连 接 点 , MFC 提 供 了 下 列 宏 :
连 接 映 射 定 义 和 分 界
BEGIN_CONNECTION_PART 声 明 一 个 嵌 入 类 , 它 实 现 了 附 加 的 连 接
点 ( 必 须 在 类 定 义 中 使 用 )
END_CONNECTION_PART 结 束 一 个 连 接 点 的 定 义 ( 必 须 在 类 定 义
中 使 用 )
CONNECTION_IID 指 定 控 件 的 连 接 点 的 接 口 ID DECLARE_CONNECTION_MAP 声 明 一 个 连 接 映 射 将 被 用 在 一 个 类 中
( 必 须 在 类 定 义 中 使 用 )
BEGIN_CONNECTION_MAP 开 始 一 个 连 接 映 射 的 定 义 ( 必 须 在 类 实
现 中 使 用 )
END_CONNECTION_MAP 结 束 一 个 连 接 映 射 的 定 义 ( 必 须 在 类 实
现 中 使 用 )
CONNECTION_PART 指 定 控 件 的 连 接 映 射 中 的 连 接 点下 面 的 函 数 帮 助 建 立 和 断 开 一 个 使 用 连 接 点 的 连 接 :
连 接 点 的 初 始 化 /终止
AfxConnectionAdvise 在 源 端 和 接 收 端 之 间 建 立 一 个 连 接
AfxConnectionUnadvise 中 断 源 端 和 接 收 端 之 间 的 一 个 连 接
注 册 OLE 控 件
OLE 控 件 与 其 它 OLE 服 务 器 对 象 一 样 , 可 以 被 其 它 具 有 OLE 能 力 的 应 用 程 序
所 访 问 。 这 是 通 过 注 册 控 件 的 类 型 库 和 类 来 实 现 的 。
下 面 的 函 数 使 你 能 够 在 W indows 的 注 册 数 据 库 中 增 添 或 删 除 控 件 类 , 属 性 页 以及 类 型 库 等 :
注册 OLE 控 件
AfxOleRegisterControlClass 在 注 册 数 据 库 中 增 添 控 件 类
AfxOleRegisterPropertyPage Class
在 注 册 数 据 库 中 增 添 控 件 的 属 性 页
AfxOleRegisterTypeLib 在 注 册 数 据 库 中 增 添 控 件 的 类 型 库
AfxOleUnregisterClass 从 注 册 数 据 库 中 删 除 控 件 类 或 属 性 页 类
AfxOleUnregisterTypeLib 从 注 册 数 据 库 中 删 除 控 件 的 类 型 库
AfxOleRegisterTypeLib 通 常 由 控 件 的 DLL 中 D llRegisterServer 的 实 现 部 分 来 调用 。 类 似 地 , A fxOle UnregisterTypeLib 由 DllUnregisterServer. 调 用 。AfxOleRegisterControlClass , AfxOleRegisterPropertyPageClass 以 及AfxOleUnregisterClass 通 常 由 控 件 的 类 工 厂 或 属 性 页 的 成 员 函 数 UpdateRegistry 来 调 用 。
类 工 厂 与 许 可
为 了 创 建 你 的 OLE 控 件 的 一 个 实 例 , 容 器 应 用 程 序 调 用 控 件 的 类 工 厂 的 成 员
函 数 。 因 为 你 的 控 件 是 一 个 实 际 的 OLE 对 象 , 由 类 工 厂 负 责 创 建 你 的 控 件 的实 例 。 每 个 OLE 控 件 都 必 须 具 有 一 个 类 工 厂 。
OLE 控 件 的 另 一 个 重 要 特 征 就 是 它 们 的 强 迫 许 可 的 能 力 。 ControlWizard 使 你能 够 在 创 建 控 件 的 时 候 将 许 可 功 能 合 并 进 去 。 如 果 需 要 获 得 有 关 控 件 许 可 的 更详 细 的 信 息 , 请 参 阅 V isual C++ 程 序 员 联 机 指 南 中 “ ActiveX 控 件 : 许 可 一 个ActiveX 控 件 ” 一 文 。
下 面 的 表 格 列 出 了 一 些 宏 和 函 数 , 它 们 可 以 用 来 声 明 并 实 现 你 的 控 件 的 类 工厂 , 也 可 以 许 可 你 的 控 件 。
类 工 厂 与 许 可
DECLARE_OLECREATE_EX 为 OLE 控 件 或 属 性 页 声 明 一 个 类 工 厂
IMPLEMENT_OLECREATE_EX 实 现 控 件 的 GetClassID 函 数 并 声 明 类 工
厂 的 一 个 实 例
BEGIN_OLEFACTORY 开 始 许 可 函 数 的 声 明
END_OLEFACTORY 结 束 许 可 函 数 的 声 明
AfxVerifyLicFile 校 验 一 个 控 件 是 否 经 许 可 在 特 定 计 算 机上 使 用
OLE 控 件 的 持 久 性
OLE 控 件 的 一 个 能 力 即 是 它 的 属 性 的 持 久 性( 或 是 串 行 化 ),这 个 能 力 使 得 OLE 控 件 可 以 对 一 个 文 件 或 流 读 、 写 属 性 值 。 容 器 应 用 程 序 可 以 利 用 串 行 化 来 存 储控 件 的 属 性 值 , 即 使 应 用 程 序 已 经 销 毁 了 这 个 控 件 。 当 以 后 创 建 了 控 件 的 一 个新 的 实 例 时 , OLE 控 件 的 属 性 值 可 以 从 文 件 或 流 中 读 取 。
OLE 控 件 的 持 久 性
PX_Blob 交 换 控 件 的 存 储 二 进 制 大 对 象 ( BLOB ) 数 据 的 属性
PX_Bool 交 换 控 件 的 BOOL 类 型 的 属 性
PX_Color 交 换 控 件 的 颜 色 属 性
PX_Currency 交 换 控 件 的 CY 类 型 的 属 性
PX_DataPath 交 换 控 件 的 CDataPathProperty 类 型 的 属 性
PX_Double 交 换 控 件 的 double 型 的 属 性
PX_Font 交 换 控 件 的 字 体 属 性
PX_Float 交 换 控 件 的 float 类 型 的 属 性PX_IUnknown 交 换 控 件 的 未 定 义 类 型 的 属 性PX_Long 交 换 控 件 的 long 型 属 性
PX_Picture 交 换 控 件 的 图 形 属 性
PX_Short 交 换 控 件 的 short 型 属 性
PX_Ulong |
交 换 控 件 的 |
ULONG 类 型 的 属 性 |
---|---|---|
PX_Ushort |
交 换 控 件 的 |
USHORT 类 型 的 属 性 |
PX_String PX_VBXFontConver |
交 换 控 件 的 字 符 串 属 性 在 VBX 控 件 的 与 字 体 有 关 的 属 性 与体 属 性 之 间 交 换 |
OLE 控 件 的 字 |
另 外 , 全 局 函 数 A fxOleTypeMatchGuid 可 以 测 试 给 定 的 GUID 与 TYPEDESC
是 否 匹 配 。
Internet 服 务 器 API 解 析 映 射
Internet 服 务 器 API 是 一 个 扩 展 的 开 放 API 集 合 ,它 向 你 提 供 了 为 你 的 M icrosoft Internet 信 息 服 务 器 创 建 附 加 内 容 、 运 行 Internet 服 务 器 程 序 的 能 力 。 当 客 户 向Internet 服 务 器 发 送 一 个 请 求 时 , 服 务 器 处 理 这 个 请 求 , 将 它 发 送 给“ 解 析 映 射 ” 中 的 一 系 列 分 析 宏 。 解 析 映 射 将 客 户 的 请 求 映 射 为 一 个 从 ChttpServer 继 承 的 类的 函 数 和 参 数 。
ISAPI 解 析 映 射
BEGIN_PARSE_MAP 开 始 一 个 分 析 映 射 的 定 义
ON_PARSE_COMMAND 分 析 客 户 命 令
ON_PARSE_COMMAND_PARAMS 为 CHttpServer 对 象 定 义 一 个 来 自
客 户 的 命 令DEFAULT_PARSE_COMMAND 调 用 由 FnName 参 数 指 定 的 页 面END_PARSE_MAP 结 束 一 个 分 析 映 射 的 定 义
Internet URL 解 析 全 局 函 数
Internet 服 务 器 API 是 一 个 扩 展 的 开 放 API 集 合 ,它 向 你 提 供 了 为 你 的 M icrosoft Internet 信 息 服 务 器 创 建 附 加 内 容 、 运 行 Internet 服 务 器 程 序 的 能 力 。 当 客 户 向Internet 服 务 器 发 送 一 个 请 求 时 , 你 可 以 使 用 一 些 全 局 的 URL 处 理 函 数 来 析 取客 户 的 信 息 。
Internet URL 解 析 全 局 函 数
AfxParseURL 分 析 一 个 URL 字 符 串 , 返 回 服 务 的 类 型及 其 内 容
AfxParseURLEx 分 析 一 个 URL 字 符 串 , 返 回 服 务 的 类 型及 其 内 容 , 同 时 还 提 供 客 户 的 名 字 和 密 码
Internet 服 务 器 API ( ISAPI ) 诊 断 宏
微 软 的 Internet 信 息 服 务 器 需 要 一 些 与 MFC 程 序 相 同 的 诊 断 服 务 。 但 是 , 为Internet 服 务 器 编 写 的 程 序 不 需 要 MFC 。 下 面 描 述 的 ISAPI 宏为 MFC 程 序 和 非MFC 程 序 提 供 了 相 同 层 次 的 调 试 功 能 。
ISAPI 诊 断 宏
ISAPIASSERT |
提 供 了 |
ASSERT 功 能 |
---|---|---|
ISAPITRACE |
提 供 了 |
TRACE 功能 |
ISAPITRACE0 |
提 供 了 |
TRACE0 功能 |
ISAPITRACE1 |
提 供 了 |
TRACE1 功能 |
ISAPITRACE2 |
提 供 了 |
TRACE2 功能 |
ISAPITRACE3 |
提 供 了 |
TRACE3 功能 |
ISAPIVERIFY |
提 供 了 |
VERIFY 功 能 |