宏 、 全 局 函 数 和 全 局 变 量

这 个 部 分 描 述 了 MFC 库 中 的 全 局 函 数 、 全 局 变 量 以 及 宏 。

注意 许 多 全 局 函 数 都 以 “ Afx ” 前 缀 开 始 — — 除 了 一 些 例 外 , 如 对 话 框数 据 交 换 ( DDX ) 函 数 和 许 多 数 据 库 函 数 以 外 , 都 遵 从 这 个 约 定 。 所 有 的全 局 变 量 都 以 “ Afx ” 前 缀 开 始 。 宏 没 有 任 何 特 定 的 前 缀 , 但 是 它 们 都 是大 写 的 。

MFC 库 和 活 动 模 板 库 ( ATL ) 共 用 一 些 字 符 串 转 换 宏 。 参 考 ATL 文 档 中 的“ 字符 串 转 换 宏 ” , 在 那 儿 讨 论 了 这 些 宏 。

如 果 需 要 有 关 C 运 行 库 的 调 试 版 本 以 及 诊 断 函 数 的 信 息 , 请 参 阅 《 M icrosoft V isual C++6.0 库 参 考 》 的 《 Microsoft Visual C++6.0 运 行 库 》 一 卷 中 的 “ 调 试例 程 ” 一 文 。

AfxAbort

void AfxAbort( );

这 是 MFC 提 供 的 缺 省 的 终 止 函 数 。 AfxAbort 是 当 发 生 了 一 个 致 命 错 误 , 如 无法 处 理 的 没 有 捕 捉 到 的 异 常 时 , 由 MFC 的 成 员 函 数 调 用 的 。 在 个 别 情 况 下 , 如 果 你 遇 到 了 无 法 恢 复 的 灾 难 性 错 误 , 你 也 可 以 自 己 调 用 AfxAbort。

AfxBeginThread

C W inThread* AfxBeginThread( AFX_THREADPROC pfnThreadProc , LPVOID

pParam ,

int nPriority = THREAD_PRIORITY_NORMAL, UINT nStackSize = 0, DWORD dwCreateFlags = 0, LPSECURITY_ATTRIBUTES lpSecurityAttrs

= NULL );

C W inThread* AfxBeginThread( CRuntimeClass* pThreadClass ,

int nPriority = THREAD_PRIORITY_NORMAL, UINT nStackSize = 0, DWORD dwCreateFlags = 0, LPSECURITY_ATTRIBUTES lpSecurityAttrs

= NULL );

返 回 值

指 向 新 创 建 的 线 程 对 象 的 指 针 。

pfnThreadProc

指 向 工 作 线 程 的 控 制 函 数 。 不 能 是 NULL 。 这 个 函 数 必 须 按 下 面 的 方 式定 义 :

UINT MyControllingFunction( LPVOID pParam );

pThreadClass

从 C W inThread 继 承 的 对 象 的 RUNTIME_CLASS 。

pParam

将 要 传 送 给 控 制 函 数 的 参 数 , 如 pfnThreadProc 中 定 义 的 函 数 参 数 所 示 。

nPriority

设 定 的 线 程 的 优 先 级 。 如 果 为 0 , 则 使 用 与 创 建 它 线 程 相 同 的 优 先 级 。在 《 W in32 程 序 员 参 考 》 的 “ SetThreadPriority ” 中 有 可 用 的 优 先 级 的 完整 列 表 和 描 述 。

nStackSize

指 定 新 线 程 使 用 的 栈 的 以 字 节 为 单 位 的 大 小 。 如 果 为 0 , 则 缺 省 的 栈 大小 与 创 建 它 的 线 程 的 栈 大 小 相 同 。

dwCreateFlags

指 定 控 制 线 程 的 创 建 过 程 的 附 加 标 志 。 这 个 标 志 可 以 是 两 个 值 之 一 :

  • CREATE_SUSPENDED 经 过 一 个 延 迟 后 启 动 这 个 线 程 。 这 个 线

    程将 在 调 用 ResumeThread 以 后 才 会 启 动 。

  • 0 创 建 后 立 即 启 动 这 个 线 程 。

lpSecurityAttrs

指 向 一 个 SECURITY_ATTRIBUTES 结 构 , 它 指 定 了 线 程 的 安 全 特 性 。如 果 为 空 , 将 使 用 与 创 建 它 的 线 程 相 同 的 安 全 特 性 。 如 果 需 要 获 得 有 关这 个 结 构 的 详 细 信 息 , 请 参 阅 《 W in32 程 序 员 参 考 手 册 》 。

说 明

调 用 这 个 函 数 以 创 建 一 个 新 的 线 程 。 AfxBeginThread 的 第 一 种 形 式 创 建 了 一 个工 作 线 程 。 第 二 种 形 式 创 建 了 一 个 用 户 界 面 线 程 。

AfxBeginThread 创 建 一 个 新 的 C W inThread 对 象 , 调 用 它 的 CreateThread 函 数以 启 动 这 个 线 程 , 并 且 返 回 这 个 线 程 的 指 针 。 整 个 过 程 都 进 行 检 查 以 保 证 如 果创 建 失 败 , 所 有 的 对 象 都 会 被 适 当 地 释 放 。 为 了 结 束 这 个 线 程 , 可 以 在 线 程 内调 用 AfxEndThread , 或 者 从 工 作 线 程 的 控 制 函 数 内 返 回 。

关 于 AfxBeginThread 的 更 多 信 息 , 请 参 阅 《 Visual C++ 程 序 员 指 南 》 中 的 “ 多线 程 : 创 建 工 作 线 程 ” 和 “ 多 线 程 : 创 建 用 户 界 面 线 程 ” 。

请 参 阅 AfxGetThread

AfxCheckError

void AFXAPI AfxCheckError(SCODE sc ); throw CMemoryExcetion *

throw COleException *

说 明

这 个 函 数 检 测 传 递 的 SCODE 是 否 是 个 错 误 。 如 果 它 是 个 错 误 , 这 个 函 数 将 抛出 一 个 异 常 。 如 果 传 递 的 SCODE 是 个 E_OUTOFMEMORY , 它 就 调 用AfxThrowMemoryException 抛 出 一 个 CMemoryException 。 否 则 , 它 调 用AfxThrowOleException 抛 出 一 个 COleException 。

这 个 函 数 可 以 用 来 检 查 你 的 应 用 程 序 中 对 OLE 函 数 调 用 的 返 回 值 。 通 过 测 试应 用 程 序 中 函 数 调 用 的 返 回 值 , 你 就 可 以 用 很 少 的 代 码 正 确 地 响 应 错 误 状 态 。

注意 这 个 函 数 在 调 试 版 本 和 非 调 试 版 本 中 具 有 相 同 的 效 果 。

示 例

LPDISPATCH pDisp = NULL;

AfxCheckError(CoCreateInstance(CLSID, NULL,CLSCTX_LOCAL_SERVER,IID_IDispatch,

(LPVOID)&pDisp));

// 如 果 有 错 误 , 则 已 经 抛 出 了 一 个 异 常

// 我 们 可 以 开 始 使 用 返 回 的 指 针

COleDispatchDriver disp(pDisp);

// 等等 ...

AfxCheckMemory

BOOL AfxCheckMemory( );

返 回 值

如 果 没 有 内 存 错 误 , 则 为 非 零 值 ; 否 则 为 0 。

说 明

这 个 函 数 使 自 由 内 存 池 有 效 并 在 需 要 时 输 出 错 误 信 息 。 如 果 这 个 函 数 没 有 检 测到 内 存 冲 突 , 它 什 么 也 不 输 出 。

当 前 在 堆 中 分 配 的 所 有 内 存 块 都 会 被 检 查 , 包 括 那 些 用 new 分 配 的 内 存 , 但是 不 包 括 那 些 用 直 接 调 用 内 存 分 配 函 数 分 配 的 内 存 , 例 如 malloc 函 数 或 者W indows 的 G lobalAlloc 函 数 。 如 果 发 现 有 内 存 块 存 在 错 误 , 就 会 在 调 试 器 上输 出 错 误 信 息 。

如 果 你 在 程 序 模 块 中 包 含 了 下 面 的 程 序 行 :

#define new DEBUG_NEW

后 面 对 AfxCheckMemory 的 调 用 都 会 显 示 发 生 内 存 分 配 的 文 件 名 和 行 号 。

注 意 如 果 你 的 模 块 中 包 含 了 一 个 或 多 个 串 行 化 类 的 实 现 , 那 么 你 必 须在 最 后 一 个 IMPLEMENT_SERIAL 宏 之 后 包 含 #define 程 序 行 。

这 个 函 数 仅 在 MFC 的 调 试 版 本 中 起 作 用 。

示 例

// AfxCheckMemory 的 例 子

CAge* pcage = new CAge( 21 );

// CAge 是 从

CObject. 继 承 而 来 的

Age* page = new Age( 22 );

// Age 不 是 从

CObject. 继 承 的

*(((char*) pcage) - 1) = 99;

//

破 坏 前 面 的 保 护 字 节

*(((char*) page) - 1) = 99;

//

破 坏 前 面 的 保 护 字 节

AfxCheckMemory();

程 序 的 结 果 如 下 :

memory check error at $0067495F = $63, should be $FD DAMAGE: before Non-Object block at $00674960

Non-Object allocated at file test02.cxx(48)

Non-Object located at $00674960 is 2 bytes long

memory check error at $00674905 = $63, should be $FD DAMAGE: before Object block at $00674906

Object allocated at file test02.cxx(47) Object located at $00674906 is 6 bytes long

AfxConnectionAdvise

BOOL AFXAPI AfxConnectionAdvise(LPUNKNOWN pUnkSrc ,REFIID iid , LPUNKNOWN pU n kSink ,BOOL bRefCoun t,DWORD FAR* pdwCookie );

返 回 值

如 果 建 立 了 连 接 则 为 非 零 值 , 否 则 为 0 。

参 数

pUnkSrc

指 向 调 用 接 口 的 对 象 的 指 针 。

pUnkSink

指 向 实 现 接 口 的 对 象 的 指 针 。

iid

连 接 的 接 口 ID 。

bRefCount

如 果 为 TRU E , 表 明 创 建 连 接 会 引 起 pUnkSink 的 引 用 计 数 增 加 。 如 果 为

FALSE , 则 表 明 应 用 计 数 不 会 增 加 。

pdwCookie

指 向 连 接 标 识 符 返 回 的 DWORD 值 的 指 针 。 当 断 开 连 接 的 时 候 , 必 须 将这 个 值 传 递 给 AfxConnectionUnadvise 的 dwCookie 参 数 。

说 明

调 用 这 个 函 数 在 pUnkSrc 指 明 的 源 端 和 pUnkSink 指 明 的 接 收 端 之 间 建 立 连 接 。

请 参 阅 AfxConnectionUnadvise

AfxConnectionUnadvise

BOOL AFXAPI AfxConnectionUnadvise(LPUNKNOWN pUnkSrc , REFIID iid , LPUNKNOWN pUnkSink , BOOL bRefCoun t, DWORD dwCookie );

返 回 值

如 果 断 开 了 连 接 则 为 非 零 值 , 否 则 为 0 。

参 数

pUnkSrc

指 向 调 用 接 口 的 对 象 的 指 针 。

pUnkSink

指 向 实 现 接 口 的 对 象 的 指 针 。

iid

连 接 点 接 口 的 接 口 ID 。

bRefCount

如 果 为 TRU E , 表 明 断 开 连 接 会 引 起 pUnkSink 的 引 用 计 数 减 小 。 如 果 为

FALSE , 则 表 明 应 用 计 数 不 会 减 小 。

pdwCookie

由 AfxConnectionAdvise 返 回 的 连 接 标 识 符

说 明

调 用 这 个 函 数 以 断 开 pUnkSrc 指 明 的 源 端 和 pUnkSink 指 明 的 接 收 端 之 间 的 连接 。

请 参 阅 AfxConnectionAdvise

AfxDaoInit

void AfxDaoInit();

throw (CDaoException);

说 明

这 个 函 数 初 始 化 DAO 数 据 库 引 擎 。 在 大 多 数 情 况 下 , 你 没 有 必 要 调 用

AfxDaoInit , 因 为 应 用 程 序 会 在 有 必 要 时 自 动 调 用 。

相 关 信 息 和 AfxDaoInit 的 调 用 示 例 请 参 见 V isual C++ 的 联 机 文 档 中 “ 技 术 注 释

54 ” 一 文 。

请 参 阅 AfxDaoTerm

AfxDaoTerm

void AfxDaoTerm ()

说 明

这 个 函 数 终 止 D A O 数 据 库 引 擎 。 通 常 你 只 需 在 常 规 的 DLL 中 调 用 这 个 函 数 。应 用 程 序 会 在 必 要 时 自 动 调 用 A fxDaoTerm 。

在 常 规 DLL 中 , 应 该 在 所 有 的 MFC DAO 对 象 都 被 销 毁 以 后 , 而 在 ExitInstance

函 数 以 前 调 用 AfxDaoTerm 。

有 关 调 用 AfxDaoTerm 的 更 多 信 息 请 参 阅《 Visual C++ 程 序 员 指 南 》中 的“ DAO : 在 DLL 中 使 用 D A O ” 一 文 。 相 关 信 息 参 见 “ Visual C++ 联 机 文 档 ” 中 的 “ 技术 注 释 54 ” 。

请 参 阅 AfxDaoInit

AfxDbInitModule

void AFXAPI AfxDbInitModule(); #include <afxdll.h>

为 了 在 MFC 的 自 动 连 接 的 常 规 DLL 中 支 持 MFC 数 据 库 ( 或 者 DAO ) , 应 该在 你 的 常 规 DLL 的 C W inApp::InitInstance 函 数 中 增 加 对 这 个 函 数 的 调 用 以 初 始化 MFC 的 数 据 库 DLL 。 确 保 这 个 调 用 出 现 在 使 用 MFC 数 据 库 DLL 的 任 何 基类 或 附 加 代 码 之 前 。 MFC 数 据 库 DLL 是 一 种 扩 展 DLL , 为 了 使 一 个 扩 展 DLL 进 入 一 个 CDynLinkLibrary 链 , 必 须 在 每 个 可 能 使 用 它 的 模 块 的 环 境 中 创 建 一个 CDynLinkLibrary 对 象 。 AfxDbInitModule 在 你 的 常 规 DLL 的 环 境 中 创 建 一个 CDynLinkLibrary 对 象 , 使 它 能 够 进 入 常 规 DLL 的 CDynLinkLibrary 链。

void AFXAPI AfxDoForAllClasses(void (* pfn )(const CRuntimeClass* pClass , void* pContex t), void* pContext );

参 数

pfn

指 向 每 个 类 都 会 调 用 的 重 复 函 数 。 这 个 参 数 是 一 个 指 向 CRuntimeClass

对 象 的 指 针 以 及 指 向 调 用 者 提 供 给 函 数 的 附 加 数 据 的 void 指 针 。

pContext

指 向 调 用 者 提 供 给 重 复 函 数 的 可 选 数 据 的 指 针 。 这 个 指 针 可 以 是 NULL 。

说 明

在 应 用 程 序 的 内 存 空 间 中 , 为 所 有 从 CObject 继 承 的 可 串 行 化 的 类 调 用 指 定 的重 复 函 数 。 从 CObject 继 承 的 可 串 行 化 的 类 是 以 DECLARE_SERIAL 宏 继 承 的 。每 次 调 用 指 定 的 重 复 函 数 时 , 都 会 将 在 pContext 中 传 递 给 A fxDoForAllClasses 的 指 针 传 递 给 重 复 函 数 。

注意 这 个 函 数 仅 在 MFC 的 调 试 版 本 中 起 作 用 。

请 参 阅 DECLARE_SERIAL

void AfxDoForAllObjects(void (* pfn )(CObject* pObject ,void* pContext ),void*

pContext );

参 数

pfn

指 向 每 个 对 象 都 执 行 的 重 复 函 数 。 函 数 的 参 数 是 一 个 指 向 CObject 的 指针 以 及 指 向 调 用 者 提 供 给 函 数 的 附 加 数 据 的 void 指 针 。

pContext

指 向 调 用 者 提 供 给 函 数 的 附 加 数 据 的 指 针 。 这 个 指 针 可 以 为 NULL 。

说 明

对 每 个 用 new 分 配 的 从 CObject 继 承 的 对 象 执 行 指 定 的 重 复 函 数 。 栈 、 全 局 变量 或 嵌 入 对 象 不 包 括 在 内 。 每 次 调 用 指 定 的 重 复 函 数 时 , 都 会 将 在 pContext 中传 递 给 AfxDoForAllObjects 的 指 针 传 递 给 重 复 函 数 。

注意 这 个 函 数 仅 在 MFC 的 调 试 版 本 中 起 作 用 。

CDumpContext afxDump;

说 明

使 用 这 个 变 量 为 你 的 应 用 程 序 提 供 基 本 的 对 象 转 储 能 力 。 afxDump 是 预 定 义 的CDumpContext 对 象 , 它 使 你 能 够 将 CDumpContext 信 息 发 送 到 调 试 器 输 出 窗口 或 者 调 试 终 端 。 通 常 把 afxDump 作 为 CObject::Dump 的 一 个 参 数 。

在 W indows NT 和 W indows 95 ( 以 及 W indows 的 早 期 版 本 ) 中 , 当 你 调 试 应用 程 序 时 , afxDump 输 出 被 发 送 到 V isual C++ 的 调 试 输 出 窗 口 。

这 个 变 量 仅 在 MFC 的 调 试 版 本 中 定 义 。有 关 afxDump 的 更 多 信 息 请 参 见《 V isual C++ 程 序 员 指 南 》 中 的 “ MFC 调 试 支 持 ” 。 Visual C++ 连 接 文 档 中 的 “ 技 术 注释 7 ” 和 “ 技 术 注 释 12 ” 中 包 含 了 其 它 一 些 信 息 。

注意 这 个 函 数 仅 在 MFC 的 调 试 版 本 中 起 作 用 。

示 例

// afxDump 的 示 例

CPerson myPerson = new CPerson;

// 设置 CPerson 对 象 的 一 些 域

//..

// 现 在 转 储 内 容

#ifdef _DEBUG

afxDump << "Dumping myPerson:\n"; myPerson->Dump(afxDump); afxDump <<"\n";

#endif

请 参 阅 Co bject::Dump AfxDump

AfxDump

void AfxDump(const CObject* pOb );

参 数

pOb

指 向 由 CObject 继 承 的 类 的 对 象 的 指 针 。

说 明

在 调 试 器 中 调 用 这 个 函 数 以 在 调 试 时 转 储 对 象 的 状 态 。 AfxDump 调 用 一 个 对 象的 Dump 函 数 并 且 将 信 息 发 送 到 afxDump 变 量 指 定 的 位 置 。 AfxDump 仅 能 在

MFC 的 调 试 版 本 中 使 用 。

你 的 程 序 代 码 不 应 该 调 用 AfxDum p, 而 是 应 该 调 用 适 当 对 象 的 Dump 成 员 函数 。

请 参 阅 CObject::Dump, afxDump

AfxDumpStack

void AFXAPI AfxDumpStack(DWORD dwTarget = AFX_STACK_DUMP_TARGET_DEFAULT);

参 数

dwTarget

指 出 转 储 输 出 的 目 标 。 其 取 值 可 以 用 位 或 操 作 符 ( |) 组 合 起 来 , 可 能 值如 下 :

  • AFX_STACK_DUMP_TARGET_TRACE 通 过 TRACE 宏 输 出 。TRACE 仅 仅

    在 调 试 版 本 中 产 生 输 出 ,在 发 行 版 本 中 不 产 生 输 出 。同 时 , TRACE 可 以 被 重 定 向 到 调 试 器 以 外 的 目 标 。

  • AFX_STACK_DUMP_TARGET_DEFAULT 将 转 储 输 出 发 送 到 缺 省目 标

    。 对 于 调 试 版 本 , 输 出 发 送 给 TRACE 宏 。 在 发 行 版 本 中 , 输 出发 送 到 剪 贴 板 。

  • AFX_STACK_DUMP_TARGET_CLIPBOARD 输 出 仅 发 送 到 剪 贴板 。 数

    据 将 按 CF_TEXT 格 式 以 普 通 文 本 的 形 式 放 在 剪 贴 板 上 。

  • AFX_STACK_DUMP_TARGET_BOTH 同 时 将 输 出 发 送 到 剪 贴 板 和

TRACE 宏。

  • AFX_STACK_DUMP_TARGET_ODS 通 过 W in32 函 数OutputDebugString()

    直 接 将 输 出 发 送 的 调 试 器 。 如 果 连 接 了 调 试 器 , 它在 调 试 版 本 和 发 行 版 本 中 都 会 产 生 调 试 器 输 出 。AFX_STACK_DUMP_TARGET_ODS 通 常 到 达 调 试 器 ( 如 果 连 接 了 调试 器 ) , 并 且 不 能 被 重 定 向 。

说 明

这 个 全 局 函 数 可 以 被 用 来 生 成 当 前 栈 的 一 个 映 象 。 下 面 的 例 子 反 映 了 MFC 对话 框 应 用 程 序 中 按 钮 处 理 函 数 调 用 AfxDumpStack 所 产 生 的 单 行 调 试 输 出 :

=== begin AfxDumpStack output ===

...

BFF928 E 0: W INDOWS\SYSTEM\KERNERL32.DLL! UTUnRegister + 2492 bytes

=== end AfxDumpStack() output ===

下 面 的 表 格 描 述 了 上 面 的 输 出 行 :

输出 描述

BFF928 E 0 : 最 近 一 次 函 数 调 用 的 返 回 地 址

W INDOWS\SYSTEM\KERNEL32.DLL! 包 含 函 数 调 用 的 模 块 的 完 整 路 径

UTUnRegister 调 用 的 函 数 原 型

+ 2492 bytes 以 字 节 为 单 位 的 从 函 数 原 型 地 址

( 这 个 例 子 中 为 UTUnregister) 到 返 回 地 址 ( 这 个 例 子 中 为BEF928 E 0 ) 的 偏 移

AfxDumpStack 在 MFC 库 的 调 试 版 本 和 非 调 试 版 本 中 都 可 以 使 用 。 但 是 , 这 个函 数 通 常 是 静 态 连 接 的 , 即 使 你 的 可 执 行 文 件 以 共 享 DLL 的 方 式 使 用 MFC 。在 共 享 库 的 实 现 中 , 可 以 在 MFCS42.LIB 库 ( 以 及 它 的 变 化 形 式 ) 中 找 到 这 个函 数 。

为 了 成 功 地 使 用 这 个 函 数 :

  • 在 你 的 路 径 中 必 须 包 含 IMAGEHLP.DLL 文 件 。如 果 你 没 有 这

    个 DLL 文 件 , 这 个 函 数 会 显 示 一 条 错 误 信 息 。 IMAGEHLP.DLL 是 随 W in32 SDK 和W indows 一 起 发 售 的 可 散 发 的 DLL 。 在 C:\[ W indows]\system[32] 下 查 找 它 。有 关 IMAGEHLP 提 供 的 函 数 集 的 介 绍 可 以 参 考 “ 可 移 植 的 可 执 行 文 件 的操 作 ” 一 文 。

  • 具 有 栈 框 架 的 模 块 必 须 包 含 调 试 信 息 。 如 果 它 不 包 含

    调 试 信 息 , 这 个 函 数仍 然 会 生 成 对 栈 的 跟 踪 , 但 是 这 种 跟 踪 是 很 简 略 的 。

请 参 阅 afxDump

AfxEnableControlContainer

void AfxEnableControlContainer();

说 明

在 你 应 用 程 序 对 象 的 InitInstance 函 数 中 调 用 这 个 函 数 , 以 便 能 够 提 供 对 OLE

控 件 容 器 的 支 持 。

有 关 OLE 控 件 ( 现 在 被 叫 做 ActiveX 控 件 ) 的 更 多 信 息 请 参 阅 《 Visual C++ 程序 员 指 南 》 中 的 “ ActiveX 控 件 主 题 ” 。

AfxEnableMemoryTracking

BOOL AfxEnableMemoryTracking(BOOL bTrack );

返 回 值

以 前 的 跟 踪 允 许 状 态 设 置 。

bTrack

将 这 个 值 设 为 TRUE 时 就 打 开 了 内 存 跟 踪 特 性 。 如 果 是 FALSE 则 将 其关 闭 。

说 明

诊 断 内 存 跟 踪 通 常 在 MFC 的 调 试 版 本 中 有 效 。 利 用 这 个 函 数 对 你 的 代 码 中 正确 分 配 内 存 的 部 分 禁 止 跟 踪 。

有 关 A fxEnableMemoryTracking 的 更 多 信 息 请 参 见 《 V isual C++ 程 序 员 指 南 》中 的 “ MFC 调 试 支 持 ” 。

注意 这 个 函 数 仅 在 MFC 的 调 试 版 本 中 起 作 用 。

AfxEndThread

void AfxEndThread(UINT nExitCode );

参 数

nExitCode

指 定 线 程 的 退 出 代 码 。

调 用 这 个 函 数 以 结 束 当 前 运 行 的 线 程 。 必 须 在 要 终 止 的 线 程 内 部 调 用 。

有 关 AfxEndThread 的 更 多 信 息 请 参 见《 Visual C++ 程 序 员 指 南 》 中 的“ 多 线 程 : 终 止 线 程 ” 。

请 参 阅 AfxBeginThread

AFX_EXT_CLASS

说 明

扩 展 DLL 使 用 AFX_EXT_CLASS 宏 以 引 出 类 。 与 扩 展 DLL 连 接 的 可 执 行 程序 使 用 这 个 宏 以 引 入 类 。 利 用 AFX_EXT_CLASS 宏 , 创 建 扩 展 DLL 时 使 用 的头 文 件 可 以 被 与 该 DLL 连 接 的 可 执 行 文 件 使 用 。

在 你 的 DLL 的 头 文 件 中 , 在 类 定 义 中 加 入 AFX_EXT_CLASS 关 键 字 , 如 下 所示 :

class AFX_EXT_CLASS CMyClass : public CDocument

{

// 类 的 主 体

};

AfxFormatString1

void AxFormatString1(CString& rString , UINT nIDS , LPCTSTR lpsz1 );

参 数

rString nIDS

lpsz1

对 CString 对 象 的 引 用 , 在 替 换 之 后 它 将 包 含 结 果 字 符 串 。模 板 字 符 串 的 资 源 ID , 替 换 将 在 模 板 字 符 串 上 发 生 。

将 替 换 模 板 字 符 串 中 格 式 字 符 “ % 1 ” 的 字 符 串 。

说 明

调 入 指 定 的 字 符 串 资 源 并 将 字 符 “ % 1 ” 替 换 为 lpsz1 指 向 的 字 符 串 。 新 形 式 的字 符 串 保 存 在 rString 中 。例 如 ,如 果 字 符 串 表 中 的 字 符 串 是“ File %1 not fount ”, 而 lpszl 代 表“ C:\ MYFILE.TXT ”,则 rString 包 含 的 字 符 串 为“ File C:\ MYFILE.TXT no found ” 。 这 个 函 数 在 格 式 化 要 向 消 息 框 或 其 它 窗 口 发 送 的 字 符 串 时 是 非 常

如 果 字 符 串 中 格 式 字 符 “ % 1 ” 出 现 了 不 止 一 次 , 那 么 会 进 行 多 次 替 换 。

请 参 阅 AxFormatString2

AfxFormatString2

void AxFormatString2(CString& rString , UINT nIDS , LPCTSTR lpsz1 , LPCTSTR

lpsz2 );

参 数

rString nIDS

lpsz1 lpsz2

对 CString 对 象 的 引 用 , 在 替 换 之 后 它 将 包 含 结 果 字 符 串 。模 板 字 符 串 的 资 源 ID , 替 换 将 在 模 板 字 符 串 上 发 生 。

将 替 换 模 板 字 符 串 中 格 式 字 符 “ % 1 ” 的 字 符 串 。将 替 换 模 板 字 符 串 中 格 式 字 符 “ % 2 ” 的 字 符 串 。

说 明

调 入 指 定 的 字 符 串 资 源 并 将 字 符 “ % 1 ” 和 “ % 2 ” 替 换 为 lpsz1lpsz2 指 向 的字 符 串 。 新 形 式 的 字 符 串 保 存 在 rString 中 。 例 如 , 如 果 字 符 串 表 中 的 字 符 串 是“ File %1 not fount in % 2” , 而 lpsz1 指 向 “ C:\ MYFILE.TXT ”, lpsz2 指 向“ C:\ MYDIR ” , 则 rString 包 含 的 字 符 串 为 “ File C:\MYFILE.TXT no found in C:\ MYDIR ” 。

如 果 字 符 串 中 格 式 字 符 “ % 1 ” 和 “ % 2 ” 出 现 了 不 止 一 次 , 那 么 会 进 行 多 次 替换 。 它 们 不 必 按 照 数 字 顺 序 排 列 。

请 参 阅 AxFormatString1

AfxFreeLibrary

BOOL AFXAPI AfxFreeLibrary(HINSTANCE hInstLib );

返 回 值

如 果 函 数 执 行 成 功 则 为 TRUE , 否 则 为 FALSE 。

参 数

hInstLib

已 调 入 的 库 模 块 的 句 柄 。 AfxLoadLibrary 返 回 这 个 句 柄 。

说 明

AfxFreeLibrary 和 AfxLoadLibrary 都 为 每 一 个 调 入 的 库 模 块 维 护 着 引 用 计 数 。AfxFreeLibrary 减 小 调 入 的 动 态 链 接 库 ( DLL ) 模 块 的 引 用 计 数 。 当 引 用 计 数减 小 到 0 时 , 这 个 模 块 将 从 调 用 进 程 的 地 址 空 间 中 除 去 , 其 句 柄 也 不 再 有 效 。每 次 调 用 AfxLoadLibrary 就 会 增 加 这 个 引 用 计 数 。

在 卸 载 一 个 库 模 块 之 前 , 系 统 使 DLL 能 够 从 使 用 它 的 进 程 分 离 出 来 。 这 样 就给 DLL 一 个 机 会 以 清 除 当 前 进 程 分 配 的 资 源 。 当 入 口 点 函 数 返 回 之 后 , 库 模块 就 从 当 前 进 程 的 地 址 空 间 中 移 去 了 。

使 用 AfxLoadLibrary 来 映 射 一 个 DLL 模 块 。

如 果 你 的 程 序 使 用 了 多 线 程 ,确 保 你 使 用 的 是 AfxFreeLibrary 和 AfxLoadLibrary

( 而 不 是 W in32 函 数 FreeLibrary 和 LoadLibrary )。当 调 入 或 卸 载 扩 展 DLL 时 , 使 用 AfxLoadLibrary 和 AfxFreeLibrary 来 启 动 和 关 闭 执 行 代 码 可 以 保 证 MFC 的 全 局 状 态 不 被 破 坏 。

请 参 阅 AfxLoadLibrary

AfxGetApp

C W inApp* AfxGetApp();

返 回 值

指 向 应 用 程 序 的 单 一 C W inApp 对 象 的 指 针 。

说 明

这 个 函 数 返 回 的 指 针 可 以 被 用 来 访 问 应 用 程 序 的 信 息 , 如 主 消 息 调 度 代 码 以 及顶 层 窗 口 等 。

AfxGetAppName

LPCTSTR AfxGetAppName();

返 回 值

包 含 应 用 程 序 名 字 的 以 null 字 符 结 尾 的 字 符 串 。

说 明

这 个 函 数 返 回 的 字 符 串 可 以 被 用 于 诊 断 消 息 , 或 是 用 作 一 个 临 时 字 符 串 名 的根 。

AfxGe tHENV

HENV AFXAPI AfxGetHENV();

返 回 值

当 前 MFC 使 用 的 ODBC 环 境 的 句 柄 。 如 果 现 在 没 有 任 何 CDatabase 对 象 或 者

CRecordset 对 象 正 被 使 用 , 则 返 回 SQL_HENV_NULL 。

说 明

你 可 以 在 直 接 调 用 ODBC 时 使 用 返 回 的 句 柄 , 但 是 你 不 能 关 闭 句 柄 , 也 不 能 假定 在 现 存 的 从 CDatabase 或 CRecordset 继 承 的 对 象 被 销 毁 后 句 柄 依 然 有 效 。

AfxGetInstanceHandle

HINSTANCE AfxGetInstanceHandle( );

代 表 应 用 程 序 的 当 前 实 例 的 HINSTANCE 值 。 如 果 是 从 与 MFC 的 USRDLL 版本 连 接 的 DLL 内 调 用 的 , 则 返 回 代 表 DLL 的 H INSTANCE 值 。

说 明

这 个 函 数 使 你 能 够 获 得 当 前 应 用 程 序 的 实 例 句 柄 。 AfxGetInstanceHandle 总 是

返 回 代 表 你 的 可 执 行 文

USRDLL 版 本 连 接 的

件 ( .EXE ) 的 HINSTANCE 值 , 除 非 它 从 与

DLL 内 调 用 的 。 在 这 种 情 况 下 , 它 返 回 的 是

MFC

DLL

HINSTANCE 值 。

请 参 阅 AfxGetResourceHandle, AfxSetResourceHandle

AfxGetInternetHandleType

DWORD AFXAPI AfxGetInternetHandleType( HINTERNET hQuery )

返 回 值

在 W ININET.H 中 定 义 的 任 何 Internet 服 务 类 型 。 这 些 Internet 服 务 的 列 表 参 见说 明 部 分 。 如 果 这 个 句 柄 是 NULL 或 者 不 能 被 识 别 , 则 函 数 返 回AFX_INET_SERVICE_UNK 。

hQuery

执 行 一 个 查 询 的 句 柄 。

说 明

使 用 这 个 全 局 函 数 来 决 定 一 个 Internet 句 柄 的 类 型 。

下 面 的 列 表 包 含 了 A fxGetInternetHandleType 可 能 返 回 的 Internet 类 型 。

  • INTERNET_HANDLE_TYPE_INTERNET

  • INTERNET_HANDLE_TYPE_CONNECT_FTP

  • INTERNET_HANDLE_TYPE_CONNECT_GOPHER

  • INTERNET_HANDLE_TYPE_CONNECT_HTTP

  • INTERNET_HANDLE_TYPE_FTP_FIND

  • INTERNET_HANDLE_TYPE_FTP_FIND_HTML

  • INTERNET_HANDLE_TYPE_FTP_FILE

  • INTERNET_HANDLE_TYPE_FTP_FILE_HTML

  • INTERNET_HANDLE_TYPE_GOPHER_FIND

  • INTERNET_HANDLE_TYPE_GOPHER_FIND_HTML

  • INTERNET_HANDLE_TYPE_GOPHER_FILE

  • INTERNET_HANDLE_TYPE_GOPHER_FILE_HTML

  • INTERNET_HANDLE_TYPE_HTTP_REQUEST

注意 为 了 调 用 这 个 函 数 , 你 的 项 目 必 须 包 含 AFXINET . H 。

请 参 阅 AfxParseURL

AfxGetMainWnd

CWnd* AfxGetMainWnd( );

返 回 值

如 果 服 务 器 具 有 一 个 可 以 在 容 器 内 现 场 激 活 的 对 象 , 并 且 这 个 容 器 是 活 动 的 , 则 这 个 函 数 返 回 一 个 指 向 包 含 这 个 现 场 活 动 文 档 的 框 架 窗 口 对 象 的 指 针 。

如 果 没 有 可 以 在 容 器 内 现 场 激 活 的 对 象 , 或 者 你 的 应 用 程 序 不 是 一 个 OLE 服务 器 , 这 个 函 数 仅 返 回 你 的 应 用 程 序 对 象 的 m_pMainWnd 。

如 果 AfxGetMainWnd 被 应 用 程 序 主 线 程 调 用 , 它 根 据 以 上 规 则 返 回 应 用 程 序的 主 窗 口 。 如 果 该 函 数 被 应 用 程 序 的 次 线 程 调 用 , 该 函 数 返 回 与 引 起 该 调 用 线程 连 接 的 主 窗 口 。

说 明

如 果 你 的 应 用 程 序 是 一 个 OLE 服 务 器 , 应 该 调 用 这 个 函 数 以 获 得 应 用 程 序 的

活 动 主 窗 口 指 针 , 而 不 是 直 接 引 用 应 用 程 序 对 象 的 m_pMainWnd 成 员 。

如 果 你 的 应 用 程 序 不 是 OLE 服 务 器 , 那 么 调 用 这 个 函 数 与 直 接 引 用 应 用 程 序对 象 的 m_pMainWnd 成 员 是 等 价 的 。

请 参 阅 CWinThread::m_pMainWnd

AfxGetResourceHandle

HINSTANCE AfxGetResourceHandle( );

返 回 值

应 用 程 序 调 入 缺 省 资 源 的 实 例 的 HINSTANCE 句 柄 。

说 明

利 用 这 个 函 数 返 回 的 HINSTANCE 句 柄 来 直 接 访 问 应 用 程 序 的 句 柄 , 例 如 , 在调 用 W indows 函 数 FindResource 时 使 用 。

请 参 阅 AfxGetInstanceHandle, AfxSetResourceHandle

AfxGetStaticModuleState

AFX_MODULE_STATE* AFXAPI AfxGetStaticModuleState( );

返 回 值

指 向 一 个 AFX_MODULE_STATE 结 构 的 指 针 。

说 明

调 用 这 个 函 数 以 在 初 始 化 之 前 设 置 模 块 状 态 , 或 者 在 清 除 后 恢 复 原 来 的 模 块 状态 。 AFX_MODULE_STATE 结 构 中 包 含 了 该 模 块 的 全 局 数 据 , 这 是 被 push 或pop 的 模 块 状 态 的 一 部 分 。

在 缺 省 情 况 下 , MFC 利 用 主 应 用 程 序 的 资 源 句 柄 来 调 入 资 源 模 板 。 如 果 你 在 一个 DLL 中 具 有 一 个 输 出 函 数 , 例 如 有 个 函 数 在 DLL 中 启 动 一 个 对 话 框 , 这 个模 板 将 被 保 存 于 DLL 模 块 中 。 你 可 能 需 要 改 变 模 块 的 状 态 以 便 使 用 正 确 的 句柄 。 你 可 以 在 函 数 的 开 头 加 入 下 面 的 代 码 以 实 现 上 述 功 能 :

AFX_MANAGE_STATE(AfxGetStaticModuleState( ));

这 会 交 换 当 前 模 块 的 状 态 和 AfxGetStaticModuleState 返 回 的 状 态 , 直 到 当 前 作用 域 结 束 。

有 关 模 块 状 态 和 MFC 的 更 多 信 息 请 参 见 《 Visual C++ 程 序 员 指 南 》 的 “ 创 建 新

的 文 档 、 窗 口 和 视 窗 ” 中 的 “ 管 理 MFC 模 块 的 状 态 数 据 ” , 以 及 Visual C++

联 机 文 档 中 的 “ 技 术 注 释 58 ” 。

请 参 阅 AFX_MANAGE_STATE

AfxGetThread

C W inThread* AfxGetThread( );

返 回 值

指 向 当 前 执 行 的 线 程 的 指 针 。

说 明

调 用 这 个 函 数 以 获 得 代 表 当 前 执 行 的 线 程 的 CWinThread 对 象 指 针 。 必 须 在 要求 的 线 程 内 部 调 用 。

请 参 阅 AfxBeginThread

AfxInitExtensionModule

BOOL AFXAPI AfxInitExtensionModule( AFX_EXTENSION_MODULE& state ,

HMODULE hModule );

返 回 值

如 果 成 功 地 初 始 化 了 扩 展 DLL , 则 返 回 TRUE ; 否 则 返 回 FALSE 。

参 数

state

对 初 始 化 后 包 含 了 扩 展 DLL 模 块 状 态 的 AFX_EXTENSION_MODULE 结 构 的 引 用 。 这 个 状 态 中 包 含 了 扩 展 DLL 在 进 入 D llM ain 之 前 作 为 一 般静 态 对 象 构 造 过 程 的 一 部 分 而 初 始 化 的 运 行 类 对 象 的 拷 贝 。

hModule

扩展 DLL 模 块 的 句 柄 。

说 明

在 扩 展 DLL 的 DllMain 中 调 用 此 函 数 以 初 始 化 DLL 。 例 如 :

static AFX_EXTENSION_MODULE extensionDLL; extern "C" int APIENTRY

D llM ain(HINSTANCE hInstance, DWORD dwReason, LPVOID)

{

if (dwReason == DLL_PROCESS_ATTACH)

{

...

// 扩 展 DLL 一 次 性 初 始 化

if (!AfxInitExtensionModule(extensionDLL, hInstance)) return 0;

AfxInitExtensionModule 生 成 DLL 的 HMODULE 的 一 个 拷 贝 , 并 捕 捉 DLL 的运 行 类 ( CRuntimeClass 结 构 ) 和 它 的 对 象 工 厂 ( COleObjectFactory 对 象 ) 以供 创 建 CDynLinkLibrary 时 使 用 。

MFC 的 扩 展 DLL 必 须 在 它 们 的 D llM ain 函 数 中 做 两 件 事 情 :

  • 调用 AfxInitExtensionModule 并 检 验 返 回 值 。

  • 如果 DLL 要 引 出 CRuntimeClass 对 象 或 者 具 有 它 自 己 的 资 源

    , 则 创 建 一 个

CDynLinkLibrary 对 象 。

当 每 个 进 程 与 扩 展 DLL 分 离 时 ( 这 发 生 在 进 程 退 出 , 或 者 因 为 调 用 了AfxFreeLibrary , DLL 被 卸 载 时 ) , 你 可 以 调 用 AfxTermExtensionModule 来 清除 扩 展 DLL 。

请 参 阅 AfxTermExtensionModule

AfxInitRichEdit

BOOL AFXAPI AfxInitRichEdit( );

说 明

调 用 这 个 函 数 来 为 应 用 程 序 初 始 化 带 格 式 编 辑 控 件 。 如 果 该 进 程 还 没 有 初 始 化公 共 控 件 库 , 则 它 还 初 始 化 公 共 控 件 库 。 如 果 你 在 MFC 应 用 程 序 内 直 接 使 用带 格 式 编 辑 控 件 , 你 必 须 调 用 这 个 函 数 以 确 保 MFC 正 确 地 初 始 化 了 带 格 式 编辑 控 件 。 如 果 你 通 过 CRichEditCtrl, CRichEditView 或 CRichEditDoc 使 用 带 格式 控 件 , 那 么 你 不 需 要 调 用 这 个 函 数 。

AfxIsMemoryBlock

BOOL AfxIsMemoryBlock( const void* p , UINT nBytes , LONG* plRequestNumber

= NULL );

返 回 值

如 果 内 存 块 是 现 在 分 配 的 , 并 且 其 长 度 也 是 正 确 的 , 则 返 回 非 零 值 。 否 则 为 0 。

参 数

p nBytes

指 向 将 被 测 试 的 内 存 块 。

包 含 了 以 字 节 为 单 位 的 内 存 块 长 度 。

plRequestNumber

指 向 一 个 长 整 数 ,它 将 被 设 为 内 存 块 的 分 配 系 列 号 码 。由 plRequestNumber

指 向 的 这 个 变 量 只 有 当 A fxIs M emoryBlock 返 回 非 零 值 时 才 会 被 填 充 。

说 明

检 测 一 个 内 存 地 址 , 确 保 它 代 表 了 一 个 由 new 的 诊 断 版 本 分 配 的 活 动 的 内 存块 。 它 同 时 也 检 验 指 定 的 大 小 是 否 与 最 初 分 配 的 大 小 相 符 。 如 果 这 个 函 数 返 回非 零 值 , 分 配 的 系 列 号 码 将 在 plRequestNumber 中 返 回 。 这 个 号 码 代 表 了 这 个内 存 块 相 对 于 其 它 所 有 内 存 分 配 的 顺 序 。

示 例

// AfxIs M emoryBlock 的 例 子

CAge* pcage = new CAge( 21 ); // CAge is derived from CObject. ASSERT( AfxIsMemoryBlock( pcage, sizeof( CAge ) ) )

请 参 阅 AfxIsValidAddress

AfxIsValidAddress

BOOL AfxIsValidAddress( const void* lp , UINT nBytes , BOOL bReadWrite = TRUE );

返 回 值

如 果 指 定 的 内 存 块 完 全 包 括 在 程 序 的 内 存 空 间 内 , 则 返 回 非 零 值 ; 否 则 返 回 0 。

参 数

lp nBytes

指 向 将 要 被 检 测 的 内 存 地 址 。

包 含 了 要 被 测 试 的 内 存 的 字 节 数 。

bReadWrite

指 明 这 块 内 存 是 可 以 读 写 ( TRUE ) 还 是 只 读 ( FALSE ) 。

测 试 任 意 的 内 存 地 址 , 确 保 它 们 完 全 处 于 程 序 的 内 存 空 间 内 。 该 地 址 并 不 仅 限于 用 new 分 配 的 内 存 块 。

请 参 阅 AfxIsMemoryBlock, AfxIsValidString

AfxIsValidString

BOOL AfxIsValidString( LPCSTR lpsz , int nLength = – 1 );

返 回 值

如 果 给 定 的 指 针 指 向 一 个 给 定 大 小 的 字 符 串 则 返 回 非 零 值 , 否 则 返 回 0 。

参 数

lpsz

要 测 试 的 指 针 。

nLength

指 定 要 测 试 的 字 符 串 的 长 度 , 以 字 节 为 单 位 。 如 果 值 为 - 1 , 表 示 字 符 串是以 null 结 尾 的 。

使 用 这 个 函 数 来 确 定 指 向 字 符 串 的 指 针 是 否 有 效 。

请 参 阅 AfxIsMemoryBlock, AfxIsValidAddress

AfxLoadLibrary

HINSTANCE AFXAPI AfxLoadLibrary( LPCTSTR lpszModuleName );

返 回 值

如 果 函 数 成 功 执 行 ,返 回 值 为 模 块 的 句 柄 。如 果 函 数 执 行 失 败 ,返 回 值 为 NULL 。

参 数

lpszModuleName

指 向 一 个 以 null 结 尾 的 字 符 串 , 其 中 包 含 了 模 块 的 名 字 ( DLL 或 EXE

文 件 ) 。 指 定 的 名 字 为 模 块 的 文 件 名 。

如 果 该 字 符 串 指 定 了 一 个 路 径 但 是 在 指 定 的 目 录 中 不 存 在 该 文 件 , 这 个函 数 执 行 失 败 。

如 果 没 有 指 定 路 径 并 且 省 略 了 文 件 的 扩 展 名 , 将 会 附 加 缺 省 的 扩 展

名 .DLL 。 但 是 , 文 件 名 字 符 串 可 以 在 尾 部 包 含 一 个 点 字 符 ( .) , 用 以 指示 模 块 名 没 有 扩 展 名 。 如 果 没 有 指 定 路 径 , 这 个 函 数 将 按 如 下 顺 序 搜 索文 件 :

  • 应 用 程 序 的 启 动 路 径 。

  • 当 前 目 录 。

  • W indows 95 : W indows 系 统 目 录 。 W indows N T: 32 位 W indows

    系统 目 录 。 目 录 的 名 字 为 SYSTEM32.

  • 仅 适 用 于 W indows N T: 1 6 位 W indows 系 统 目 录 。 没 有 W

    in32 函 数 可

以 获 得 这 个 目 录 的 路 径 , 但 是 将 会 搜 索 这 个 目 录 。 这 个 目 录 的 名 字 是

SYSTEM 。

  • W indows 目 录 。

  • 在 PATH 环 境 变 量 中 列 出 的 路 径 。

说 明

使 用 AfxLoadLibrary 来 载 入 一 个 DLL 模 块 。 它 返 回 一 个 句 柄 , 可 被 用 于GetProcAddress 以 获 得 DLL 函 数 的 地 址 。 AfxLoadLibrary 还 可 以 用 来 载 入 其 它可 执 行 模 块 。

每 个 进 程 都 为 载 入 的 库 模 块 维 护 这 一 个 引 用 计 数 。 这 个 引 用 计 数 在 调 用AfxLoadLibrary 时 增 加 , 而 在 调 用 A fxFreeLibrary 时 减 小 。 当 引 用 计 数 减 小 到零 时 , 该 模 块 就 被 从 调 用 进 程 的 地 址 空 间 中 移 去 , 句 柄 也 不 再 有 效 。

函 数 LoadLibrary 和 FreeLibrary )。当 调 入 或 卸 载 扩 展 DLL 时 使 用 AfxLoadLibrary 和 AfxFreeLibrary 来 启 动 和 关 闭 执 行 代 码 可 以 保 证 MFC 的 全 局 状 态 不 被 破 坏 。请 参 阅 AfxFreeLibrary

AFX_MANAGE_STATE

AFX_MANAGE_STATE( AFX_MODULE_STATE* pModuleState )

参 数

pModuleState

指 向 一 个 AFX_MODULE_STATE 结 构 的 指 针 。

说 明

调 用 这 个 宏 以 保 护 DLL 中 的 引 出 函 数 。 调 用 了 这 个 宏 以 后 , pModuleState 就是 立 即 包 含 域 的 剩 余 部 分 的 实 际 模 块 状 态 。 在 脱 离 作 用 域 之 前 , 原 来 的 实 际 模块 状 态 将 被 自 动 保 存 。

AFX_MODULE_STATE 结 构 中 包 含 了 有 关 模 块 的 全 局 数 据 ,这 是 被 p ush 或 pop

的 模 块 状 态 的 一 部 分 。

个 DLL 中 有 一 个 输 出 函 数 , 例 如 在 DLL 中 启 动 一 个 对 话 框 的 函 数 , 这 个 模 板实 际 保 存 在 DLL 模 块 中 。 你 需 要 为 将 要 使 用 的 正 确 的 句 柄 切 换 模 块 状 态 。 你可 以 在 函 数 的 开 头 加 上 如 下 代 码 以 实 现 这 个 目 的 :

AFX_MANAGE_STATE(AfxGetStaticModuleState( ));

这 会 交 换 当 前 模 块 的 状 态 和 AfxGetStaticModuleState 返 回 的 状 态 , 直 到 当 前 作用 域 结 束 。

有 关 模 块 状 态 和 MFC 的 更 多 信 息 请 参 见 《 Visual C++ 程 序 员 指 南 》 的 “ 创 建 新的 文 档 、 窗 口 和 视 窗 ” 中 的 “ 管 理 MFC 模 块 的 状 态 数 据 ” , 以 及 Visual C++ 联 机 文 档 中 的 “ 技 术 注 释 58 ” 。

请 参 阅 AfxGetStaticModuleState

afxMemDF

int afxMemDF;

说 明

这 个 变 量 在 调 试 器 或 你 的 程 序 中 都 可 以 访 问 , 它 允 许 你 调 整 分 配 诊 断 。 它 可 以具 有 枚 举 变 量 afxMemDF 指 定 的 下 列 值 :

  • alloc M emDF 打 开 调 试 分 配 函 数 ( 调 试 库 中 的 缺 省 设 置

    ) 。

  • delayFreeMemDF 延 迟 释 放 内 存 。 当 你 的 应 用 程 序 释 放 一 个

    内 存 块 的 时候 , 分 配 函 数 并 不 将 此 内 存 返 还 给 操 作 系 统 。 这 将 带 给 你 的 程 序 最 大 的 内存 压 力 。

  • checkAlwaysMemDF 每 次 分 配 或 释 放 内 存 时 调 用 AfxCheckMemory

    。 这 会显 著 地 减 慢 分 配 和 收 集 内 存 的 过 程 。

示 例

// afx M emDF 的 例 子

afxMemDF = allocMemDF | checkAlwaysMemDF;

AfxMessageBox

int AfxMessageBox( LPCTSTR lpszText , UINT nType = MB_OK, UINT nIDHelp = 0 );

int AFXAPI AfxMessageBox( UINT nIDPromp t, UINT nType = MB_OK, UINT

nIDHelp = (UINT) – 1 );

返 回 值

如 果 没 有 足 够 的 内 存 来 显 示 消 息 框 就 返 回 零 , 否 则 可 能 是 下 列 值 之 一 :

  • IDABORT 选 择 了 Abort 按 钮 。

  • IDCANCEL 选 择 了 Cancel 按 钮 。

  • IDIGNORE 选 择 了 Ignore 按 钮 。

  • IDNO 选 择 了 N o 按 钮 。

  • IDOK 选 择 了 O K 按 钮 。

  • IDRETRY 选 择 了 Retry 按 钮 。

  • IDYES 选 择 了 Yes 按 钮 。

如 果 消 息 框 具 有 Cancel 按 钮 , 那 么 当 按 下 了 ESC 键 或 者 是 选 择 了 Cancel 按 钮时 , 就 会 返 回 IDCANCEL 值 。 如 果 消 息 框 没 有 Cancel 按 钮 , 按 下 ESC 键 没 有任 何 效 果 。

在 格 式 化 消 息 框 中 显 示 的 字 符 串 时 , 函 数 A fxFormatString1 和 AfxFormatString2

非 常 有 用 。

参 数

lpszText

指 向 一 个 CString 对 象 或 者 以 null 结 尾 的 字 符 串 , 包 含 了 要 在 消 息 框 中显 示 的 信 息 。

nType

消 息 框 的 风 格 。 对 对 话 框 应 用 任 何 一 种 消 息 框 风 格 。

nIDHelp

消 息 的 帮 助 上 下 文 ID 。 0 表 示 将 使 用 应 用 程 序 的 缺 省 帮 助 上 下 文 。

nIDPrompt

用 于 引 用 字 符 串 表 中 的 字 符 串 的 唯 一 的 ID 。

说 明

在 屏 幕 上 显 示 一 个 消 息 框 , 这 个 重 载 函 数 的 第 一 种 形 式 在 消 息 框 中 显 示 由lpszText 指 向 的 文 本 字 符 串 , 并 使 用 nIDHelp 来 描 述 帮 助 上 下 文 。 当 用 户 按 下了 帮 助 键 ( 通 常 是 F 1 ) 时 , 帮 助 上 下 文 被 用 来 跳 转 到 相 关 的 帮 助 主 题 。

函 数 的 第 二 种 形 式 使 用 nIDPrompt 所 代 表 的 字 符 串 资 源 来 在 消 息 框 中 显 示 一 个消 息 。 相 关 的 帮 助 页 面 通 过 nIDHelp 的 值 来 查 找 。 如 果 使 用 了 nIDHelp 的 缺 省值 ( - 1 ) , 则 帮 助 上 下 文 将 使 用 字 符 串 资 源 ID , 即 nIDPromp t。 有 关 定 义 帮助 上 下 文 的 更 多 信 息 参 见 《 V isual C++ 程 序 员 指 南 》 中 的 “ 帮 助 主 题 ” 一 文 以及 V isual C++ 联 机 文 档 中 的 “ 技 术 注 释 28 ” 。

请 参 阅 CWnd::MessageBox

AfxNetInitModule

void AFXAPI AfxNetInitModule( );

#include <afxdll.h>

说 明

为 了 在 与 MFC 动 态 连 接 的 常 规 DLL 中 增 加 MFC 的 Sockets 支 持 , 可 以 在 你 的常 规 DLL 的 CWinApp::InitInstance 函 数 中 加 入 对 这 个 函 数 的 调 用 以 初 始 化 MFC 的 SocketsDLL 。 MFC 的 Sockets DLL 是 一 种 扩 展 DLL , 为 了 使 扩 展 DLL 加 入一 个 CDynLinkLibrary 链 , 必 须 在 每 个 使 用 它 的 模 块 的 环 境 中 创 建 一 个CDynLinkLibrary 对 象 。 AfxNetInitModule 在 你 的 常 规 DLL 的 环 境 中 创 建 了 一个 CDynLinkLibrary 对 象 , 这 样 它 就 可 以 进 入 常 规 DLL 的 CDynLinkLibrary 对象 链 了 。

AFX_ODBC_CALL

AFX_ODBC_CALL( SQLFunc )

参 数

SQLFunc

一个 ODBC API 函 数 。 有 关 ODBC API 函 数 的 更 多 信 息 请 参 见 《 ODBC SDK 程 序 员 参 考 》 。

说 明

使 用 这 个 宏 来 调 用 那 些 返 回 SQL_STILL_EXECUTING 的 ODBC API 函 数 。AFX_ODBC_CALL 会 重 复 调 用 这 个 函 数 , 直 到 它 们 不 再 返 回SQL_STILL_EXECUTING 。

在 使 用 AFX_ODBC_CALL 之 前 , 你 必 须 声 明 一 个 RETCODE 类 型 的 变 量nRetCode 。 你 可 以 在 调 用 了 这 个 宏 后 使 用 CRecordset::Check 函 数 来 检 查nRetCode 的 值 。

注 意 现 在 MFC 的 ODBC 类 仅 使 用 同 步 处 理 。 如 果 要 实 现 异 步 操 作 , 你 必 须 调用 ODBC 的 API 函 数 SQLSetConnectOption 。有 关 的 更 多 信 息 请 参 见《 ODBC SDK 程 序 员 参 考 》 中 的 “ 异 步 执 行 函 数 ” 主 题 。

示 例

这 个 例 子 使 用 AFX_ODBC_CALL 来 调 用 ODBC 的 API 函 数 SQLColumns , 它返 回 由 strTableName 列 名 的 表 中 的 数 据 列 的 列 表 。 注 意 , 声 明 了 nRetCode , 并 且 将 记 录 集 数 据 成 员 作 为 参 数 传 递 给 该 函 数 。 这 个 例 子 同 时 还 演 示 了 如 何 用CRecordset 类 的 成 员 函 数 Check 来 检 查 结 果 。 变 量 prs 是 指 向 CRecordset 对 象的 指 针 , 可 以 在 别 处 声 明 。

// AFX_ODBC_CALL 的 例 子

RETCODE nRetCode;

AFX_ODBC_CALL( ::SQLColumns( prs->m_hstmt, (UCHAR *)NULL, SQL_NTS, (UCHAR *)NULL,

SQL_NTS, (UCHAR *)(constchar*)strTableName, SQL_NTS, (UCHAR *)NULL, SQL_NTS ) );

if ( !prs->Check( nRetCode ) )

{

A fxThrowDBException( nRetCode, prs->m_pdb,

prs->m_hstmt ); TRACE( "SQLColumns failed\n" );

}

请 参 阅 AFX_SQL_ASYNC, AFX_SQL_SYNC

AfxOleCanExitApp

BOOL AFXAPI AfxOleCanExitApp( ); #include <afxdisp.h>

返 回 值

如 果 应 用 程 序 可 以 退 出 , 则 返 回 非 零 值 ; 否 则 为 0 。

说 明

指 明 一 个 应 用 程 序 是 否 可 以 退 出 。 如 果 还 存 在 着 对 应 用 程 序 对 象 的 引 用 , 它 就不 能 退 出 。 全 局 函 数 AfxOleLockApp 以 及 AfxOleUnlockApp 分 别 增 加 和 减 小对 应 用 程 序 对 象 的 应 用 计 数 。 在 这 个 计 数 不 为 零 时 , 应 用 程 序 就 不 能 退 出 。 如果 这 个 计 数 为 非 零 值 , 那 么 当 用 户 选 择 了 系 统 菜 单 中 的 Close 或 者 File 菜 单 中的 Exit 时 , 应 用 程 序 的 主 窗 口 就 被 隐 藏 ( 不 会 被 销 毁 ) 。 应 用 框 架 会 在CFrameWnd::OnClose 中 调 用 这 个 函 数 。

请 参 阅 AfxOleLockApp, AfxOleUnlockApp

AfxOleGetMessageFilter

COleMessageFilter* AFXAPI AfxOleGetMessageFilter( ); #include <afxwin.h>

返 回 值

指 向 当 前 消 息 过 滤 器 的 指 针 。

说 明

获 得 应 用 程 序 当 前 的 消 息 过 滤 器 。 调 用 这 个 函 数 可 以 访 问 当 前 从

COleMessageFilter 继 承 的 对 象 , 正 如 你 调 用 AfxGetApp 可 以 访 问 当 前 的 应 用 程序 对 象 一 样 。

示 例

COleMessageFilter* pFilter = AfxOleGetMessageFilter(); ASSERT_VALID(pFilter);

pFilter->BeginBusyState();

// 完 成 一 些 需 要 busy 状 态 的 操 作

pFilter->EndBusyState();

请 参 阅 COleMessageFilter, AfxGetApp

AfxOleGetUserCtrl

BOOL AFXAPI AfxOleGetUserCtrl( ); #include <afxdisp.h>

返 回 值

如 果 用 户 正 控 制 应 用 程 序 , 则 返 回 非 零 值 ; 否 则 为 0 。

说 明

获 得 当 前 的 用 户 控 制 标 志 。 当 用 户 打 开 或 创 建 了 一 个 新 文 档 时 , 就 意 味 着 该 用户 控 制 着 应 用 程 序 。 如 果 应 用 程 序 不 是 由 OLE 系统 DLL 启 动 的 , 换 句 话 说 , 如 果 用 户 通 过 系 统 外 壳 启 动 了 应 用 程 序 , 也 认 为 是 用 户 控 制 了 应 用 程 序 。

请 参 阅 AfxOleSetUserCtrl

AfxOleInit

BOOL AFXAPI AfxOleInit( ); #include <afxdisp.h>

返 回 值

如 果 函 数 执 行 成 功 则 返 回 非 零 值 。 如 果 初 始 化 失 败 则 为 0 , 可 能 是 因 为 安 装 了版 本 不 正 确 的 OLE 系统 DLL 。

说 明

初 始 化 OLE 系 统 DLL 。

AfxOleInitModule

void AFXAPI AfxOleInitModule( ); #include <afxdll.h>

说 明

为 了 在 与 MFC 动 态 连 接 的 常 规 DLL 中 增 加 MFC 的 OLE 支 持 , 可 以 在 你 的 常规 DLL 的 CWinApp::InitInstance 函 数 中 加 入 对 这 个 函 数 的 调 用 以 初 始 化 MFC 的 OLE DLL 。 MFC 的 OLE DLL 是 一 种 扩 展 DLL , 为 了 使 扩 展 DLL 加 入 一 个CDynLinkLibrary 链 , 必 须 在 每 个 使 用 它 的 模 块 的 环 境 中 创 建 一 个CDynLinkLibrary 对 象 。 AfxNetInitModule 在 你 的 常 规 DLL 的 环 境 中 创 建 了 一个 CDynLinkLibrary 对 象 , 这 样 它 就 可 以 进 入 常 规 DLL 的 CDynLinkLibrary 对象 链 了 。

如 果 你 正 在 创 建 一 个 OLE 控 件 并 使 用 了 COleControlModule , 你 就 不 用 调 用AfxOleInitModule , 因 为 COleControlModule 的 成 员 函 数 InitInstance 以 及 调 用了 AfxOleInitModule 。

AfxOleLockApp

void AFXAPI AfxOleLockApp( );

说 明

增 加 框 架 对 应 用 程 序 的 活 动 对 象 的 全 局 计 数 。

框 架 保 存 对 应 用 程 序 的 活 动 对 象 的 计 数 。 AfxOleLockApp 和 AfxOleUnlockApp

分 别 增 加 和 减 小 这 个 计 数 值 。

当 用 户 试 图 关 闭 仍 然 具 有 活 动 对 象 的 应 用 程 序 – – – – 这 样 的 应 用 程 序 的 活 动 对 象计 数 为 非 零 值 – – – – 时 , 框 架 将 会 把 应 用 程 序 从 用 户 的 视 野 中 隐 藏 起 来 , 而 不 是完 全 地 关 闭 它 。 AfxOleCanExitApp 函 数 指 明 了 应 用 程 序 是 否 可 以 退 出 。

如 果 一 个 引 出 OLE 接 口 的 对 象 不 希 望 在 被 客 户 应 用 程 序 使 用 时 被 销 毁 , 就 为它 调 用 AfxOleLockApp 函 数 。 同 时 , 对 于 在 构 造 函 数 中 调 用 了 AfxOleLockApp 的 对 象 , 应 当 在 其 析 构 函 数 内 调 用 AfxOleUnlockApp 函 数 。 在 缺 省 情 况 下 , COleDocumen t( 及 其 派 生 类 ) 自 动 地 锁 定 或 者 解 锁 应 用 程 序 。

请 参 阅 AfxOleUnlockApp, AfxOleCanExitApp, COleDocument

AfxOleLockControl

BOOL AFXAPI AfxOleLockControl( REFCLSID clsid ); BOOL AFXAPI AfxOleLockControl( LPCTSTR lpszProgID );

返 回 值

如 果 控 件 的 类 被 成 功 地 锁 定 , 则 返 回 非 零 值 ; 否 则 返 回 0 。

参 数

clsid

控 件 的 唯 一 的 类 ID 。

lpszProgID

控 件 的 唯 一 程 序 ID 。

说 明

锁 定 了 指 定 控 件 的 类 工 厂 以 后 , 与 该 控 件 有 关 的 动 态 生 成 的 数 据 就 保 留 在 内 存中 。 这 样 能 够 显 著 地 加 速 控 件 的 显 示 过 程 。 例 如 , 一 旦 你 在 对 话 框 中 创 建 了 一个 控 件 并 且 用 AfxOleLockControl 锁 定 了 它 , 每 次 对 话 框 显 示 或 销 毁 的 时 候 , 你 就 不 需 要 再 创 建 或 销 毁 这 个 控 件 了 。 如 果 用 户 重 复 地 打 开 和 关 闭 对 话 框 , 你的 控 件 将 会 显 著 地 提 高 性 能 。 当 你 准 备 销 毁 控 件 时 , 调 用 AfxOleUnlockControl 函 数 。

请 参 阅 AfxOleUnlockControl

AfxOleRegisterControlClass

BOOL AFXAPI AfxOleRegisterControlClass( HINSTANCE hInstance , REFCLSID clsid , LPCTSTR pszProgID , UINT idTypeNam e, UINT idBitmap , int nRegFlags , D W O R D dwMiscStatus , REFGUID tlid , WORD wVerMajor , W O R D wVerMinor );

#include <afxctl.h>

返 回 值

如 果 注 册 了 控 件 类 , 则 返 回 非 零 值 ; 否 则 返 回 0 。

参 数

hInstance

与 控 件 类 相 关 的 模 块 的 实 例 句 柄 。

clsid

控 件 的 唯 一 的 类 ID 。

pszProgID

控 件 的 唯 一 的 程 序 ID 。

idTypeName

字 符 串 的 资 源 ID , 该 字 符 串 中 包 含 了 用 户 可 读 的 控 件 的 类 型 名 。

idBitmap

位 图 的 资 源 ID , 该 位 图 用 于 在 工 具 条 或 调 色 板 中 表 示 OLE 控 件 。

nRegFlags

包 含 了 下 列 标 志 的 一 个 或 多 个 :

  • afxRegInsertable 允 许 控 件 在 OLE 对 象 的 插 入 对 象 对 话 框 中

    出 现 。

  • afxRegApartmentThreading 将 注 册 表 中 的 线 程 模 式 设 置 为

ThreadingModel=Apartment.

注意 在 MFC4.2 以 前 的 MFC 版 本 中 , 整 型 的 nRegFlags 参 数 是 BOOL 类型 的 。 由 bInsetable 来 决 定 是 否 可 以 通 过 插 入 对 象 对 话 框 来 加 入 控 件 。

dwMiscStatus

包 含 了 下 列 状 态 标 志 中 的 一 个 或 多 个 ( 对 这 些 标 志 的 详 细 描 述 请 参 见

《 OLE 程 序 员 参 考 》 中 列 举 的 OLEMISC ) 。

  • OLEMISC_RECOMPOSEONRESIZE

  • OLEMISC_ONLYICONIC

  • OLEMISC_INSERTNOTREPLACE

  • OLEMISC_STATIC

  • OLEMISC_CANTLINKINSIDE

  • OLEMISC_CANLINKBYOLE1

tlid

  • OLEMISC_ISLINKOBJECT

  • OLEMISC_INSIDEOUT

  • OLEMISC_ACTIVATEWHENVISIBLE

  • OLEMISC_RENDERINGISDEVICEINDEPENDENT

  • OLEMISC_INVISIBLEATRUNTIME

  • OLEMISC_ALWAYSRUN

  • OLEMISC_ACTSLIKEBUTTON

  • OLEMISC_ACTSLIKELABEL

  • OLEMISC_NOUIACTIVATE

  • OLEMISC_ALIGNABLE

  • OLEMISC_IMEMODE

  • OLEMISC_SIMPLEFRAME

  • OLEMISC_SETCLIENTSITEFIRST

控 件 类 的 唯 一 的 ID 。

wVerMajor

控 件 类 的 主 版 本 号 码 。

wVerMinor

控 件 类 的 次 版 本 号 码 。

说 明

通 过 W indows 的 注 册 数 据 库 来 注 册 控 件 类 。 这 就 使 得 控 件 可 以 被 具 有 OLE 控件 能 力 的 容 器 所 使 用 。 AfxOleRegisterControlClass 用 控 件 的 名 字 及 其 在 系 统 中的 位 置 来 更 新 系 统 注 册 表 , 同 时 在 注 册 表 中 设 置 控 件 支 持 的 线 程 模 式 。 有 关 的更 多 信 息 请 参 见 《 Visual C++ 联 机 文 档 》 中 的 “ 技 术 注 释 64 ” , 名 为 “ OLE 控件 中 的 Apartment 模 式 ” , 以 及 《 W in32 SDK 》 中 的 “ 进 程 与 线 程 ” 。

示 例

// COleObjectFactory::UpdateRegistry 类 成 员 函 数 的 实 现

//

BOOL CMyApartmentAwareCtrl::CApartmentCtrlFactory::UpdateRegistry(BOOL bRegister)

{

// 目 的 : 检 验 你 的 控 件 是 否 遵 循 Apartment 模 式 线 程 规 则 。

// 更 多 的 信 息 参 考 M F C 技 术 注 释 64 。

// 如 果 你 的 控 件 不 遵 循 Apartment 模 式 规 则 , 那 么 你 必 须 修 改 下 面 的 代 码

// 将 第 六 个 参 数 从 afxRegInsertable | afxRegApartmentThreading

// 变为 afxRegInsertable. if (bRegister)

return AfxOleRegisterControlClass()

AfxGetInstanceHandle(), m_clsid,

m_lpszProgID, IDS_APARTMENT, IDB_APARTMENT,

afxRegInsertable | afxRegApartmentThreading,

_dwApartmentOleMisc,

_tlid,

_wVerMajor,

_wVerMinor);

else

return AfxOleUnregisterClass(m_clsid, m_lpszProgID);

上 面 的 例 子 演 示 了 如 何 将 代 表 可 插 入 的 标 志 和 代 表 Apartment 模 式 的 标 志 通 过或 运 算 组 合 成 第 六 个 参 数 来 调 用 AfxOleregisterControlClass 函 数 。

afxRegInsertable | afxRegApartmentThreading,

对 于 允 许 的 容 器 , 该 控 件 将 出 现 在 插 入 对 象 对 话 框 中 , 同 时 它 将 会 适 用Apartment 模 式 。 适 用 于 Apartment 模 式 的 控 件 必 须 确 保 静 态 的 类 数 据 通 过 锁 定得 到 保 护 , 因 此 当 Apartment 中 的 控 件 访 问 静 态 数 据 时 , 在 它 结 束 之 前 不 会 被调 度 程 序 禁 止 , 相 同 类 的 其 它 对 象 也 不 会 开 始 使 用 相 同 的 静 态 数 据 。 对 静 态 数据 的 任 何 访 问 都 必 须 间 接 地 通 过 临 界 区 代 码 进 行 。

请 参 阅

AfxOleRegisterPropertyPageClass,AfxOleRegisterTypeLib,AfxOleUnregisterClass, AfxOleUnregisterTypeLib

AfxOleRegisterPropertyPageClass

BOOL AFXAPI AfxOleRegisterPropertyPageClass( HINSTANCE hInstance, REFCLSID clsid, UINT idTypeNam e, int nRegFlags )

#include <afxctl.h>

返 回 值

如 果 注 册 了 控 件 类 , 则 返 回 非 零 值 , 否 则 返 回 0 。

参 数

hInstance

与 属 性 页 类 相 关 的 模 块 的 实 例 句 柄 。

clsid

属 性 页 的 唯 一 的 类 ID 。

idTypeName

字 符 串 的 资 源 ID , 该 字 符 串 包 含 了 用 户 可 读 的 属 性 页 的 名 字 。

可 能 包 含 标 志 :

  • afxRegApartmentThreading 将 注 册 表 中 的 线 程 模 式 设 置 为

ThreadingModel=Apartment.

注意 在 MFC4.2 以 前 的 MFC 版 本 中 , 没 有 整 型 的 nRegFlags 参 数 。 同 时afxRegInsertable 标 志 对 于 属 性 页 也 是 无 效 的 , 如 果 设 置 了 该 标 志 , 可能 会 在 MFC 中 引 起 ASSERT 。

说 明

通 过 W indows 的 注 册 数 据 库 来 注 册 控 件 类 。 这 就 使 得 属 性 页 可 以 被 具 有 OLE 控 件 能 力 的 容 器 所 使 用 。 AfxOleRegisterPropertyPageClass 用 属 性 页 的 名 字 及 其在 系 统 中 的 位 置 来 更 新 系 统 注 册 表 , 同 时 在 注 册 表 中 设 置 控 件 支 持 的 线 程 模式 。有 关 的 更 多 信 息 请 参 见 V isual C++ 联 机 文 档 中 的“ 技 术 注 释 64 ”,名 为“ OLE 控 件 中 的 Apartment 模 式 ” , 以 及 《 W in32 SDK 》 中 的 “ 进 程 与 线 程 ” 。

请 参 阅 AfxOleRegisterControlClass, AfxOleRegisterTypeLib

AfxOleRegisterServerClass

BOOL AFXAPI AfxOleRegisterServerClass( REFCLSID clsid , LPCTSTR

lpszClassNam e, LPCTSTR lpszShortTypeNam e, LPCTSTR lpszLongTypeNam e,

LPCTSTR* rglpszOverwrite = NULL ); #include <afxdisp.h>

返 回 值

如 果 成 功 注 册 了 服 务 器 类 , 则 返 回 非 零 值 ; 否 则 返 回 0 。

参 数

clsid

对 服 务 器 的 OLE 类 ID 的 引 用 。

lpszClassName

指 向 包 含 服 务 器 对 象 的 类 名 的 字 符 串 的 指 针 。

lpszShortTypeName

指 向 包 含 服 务 器 对 象 类 型 的 短 名 字 的 字 符 串 的 指 针 , 如 : “ Chart” 。

lpszLongTypeName

指 向 包 含 服 务 器 对 象 类 型 的 长 名 字 的 字 符 串 的 指 针 ,如 :“ Microsoft Excel

5.0 Chart” 。

nAppType

可 能 的 取 值 如 下 :

  • OAT_INPLACE_SERVER 服 务 器 具 有 完 整 的 服 务 器 接 口 。

  • OAT_SERVER 服 务 器 只 支 持 嵌 入 。

  • OAT_CONTAINER 容 器 支 持 与 嵌 入 的 连 接 。

  • OAT_DISPATCH_OBJECT 具 有 ID ispatch 能 力 的 对 象 。

rglpszRegister

字 符 串 指 针 数 组 , 代 表 OLE 系 统 注 册 表 的 键 和 值 , 当 这 些 键 现 在 没 有 值时 将 被 加 入 OLE 系 统 注 册 表 。

rglpszOverwrite

字 符 串 指 针 数 组 , 代 表 OLE 系 统 注 册 表 的 键 和 值 , 当 这 些 键 现 在 已 经 有值 时 将 被 加 入 OLE 系 统 注 册 表 。

说 明

这 个 函 数 使 你 能 够 在 OLE 系 统 注 册 表 中 注 册 你 自 己 的 服 务 器 。 多 数 应 用 程 序可 以 使 用 COleTemplateServer::Register 来 注 册 应 用 程 序 的 文 档 类 型 。 如 果 你 的应 用 程 序 的 系 统 注 册 表 格 式 不 符 合 通 常 的 形 式 , 你 可 以 使 用AfxOleRegisterServerClass 来 获 得 更 多 的 控 制 。

字 符 串 指 针 的 数 组 , 每 一 个 字 符 串 都 包 含 了 一 个 键 和 值 , 用 NULL 字 符 ( '\n ') 隔 开 。 每 一 个 字 符 串 都 有 可 以 替 换 的 参 数 , 它 们 的 位 置 用 字 符 “ % 1 ” 到 “ % 5 ” 来 标 记 。

符 号 按 照 下 列 方 式 填 充 :

符号 取值

% 1 类 ID , 作 为 字 符 串 格 式 化

% 2 类 名

% 3 可 执 行 文 件 的 路 径

% 4 短 类 型 名

% 5 长 类 型 名

请 参 阅 COleTemplateServer::UpdateRegistry

AfxOleRegisterTypeLib

BOOL AfxOleRegisterTypeLib(HINSTANCE hInstance , REFGUID tlid , LPCTSTR pszFileNam =NULL,LPCTSTR pszHelpDir = NULL);

返 回 值

如 果 注 册 了 类 型 库 , 则 返 回 非 零 值 ; 否 则 返 回 0 。

参 数

hInstance

与 类 型 库 相 关 的 应 用 程 序 的 实 例 句 柄 。

tlid

类 型 库 的 唯 一 的 ID 。

pszFileName

指 向 控 件 的 本 地 化 类 型 库 文 件 ( .TLB ) 的 可 选 文 件 名 。

pszHelpDir

类 型 库 的 帮 助 文 件 所 在 目 录 的 名 字 。 如 果 为 NULL , 就 假 定 帮 助 文 件 位于 与 类 型 库 本 身 相 同 的 目 录 。

说 明

在 W indows 系 统 注 册 表 中 注 册 类 型 库 , 允 许 其 它 具 有 OLE 控 件 能 力 的 容 器 使用 类 型 库 。 这 个 函 数 用 类 型 库 的 名 字 及 其 在 系 统 中 的 位 置 来 更 新 注 册 表 。

请 参 阅 AfxOleUnregisterTypeLib, AfxOleRegisterControlClass, AfxOleUnregisterClass

AfxOleSetEditMenu

void AFXAPI AfxOleSetEditMenu( COleClientItem* pClient , CMenu* pMenu , UINT iMenuItem , UINT nIDVerbMin , UINT nIDVerbMax = 0, UINT nIDConvert = 0 );

#include <afxole.h>

参 数

pClient

指 向 客 户 OLE 项 的 指 针 。

pMenu

指 向 要 更 新 的 菜 单 对 象 的 指 针 。

iMenuItem

要 更 新 的 菜 单 项 的 索 引 。

nIDVerbMin

响 应 起 始 动 词 的 命 令 ID 。

nIDVerbMax

响 应 最 后 的 动 词 的 命 令 ID 。

nIDConvert

Convert 菜 单 项 的 ID 。

说 明

该 函 数 实 现 了 typename Object 命 令 的 用 户 接 口 。 如 果 服 务 器 只 能 识 别 起 始 的 动词 , 菜 单 项 就 变 为 “ verb typename Object” , 当 用 户 选 择 了 命 令 时 , 将 会 发 送nIDVerbMin 命 令 。 如 果 服 务 器 能 够 识 别 几 个 命 令 , 菜 单 项 就 变 为 “ typename Object ” , 当 用 户 选 择 命 令 时 , 有 一 个 子 菜 单 列 出 了 所 有 可 能 的 动 词 。 当 用 户从 子 菜 单 中 选 择 了 一 个 动 词 以 后 , 如 果 用 户 选 择 的 是 第 一 个 动 词 , 则 发 送nIDVerbMin , 如 果 选 择 了 第 二 个 动 词 , 则 发 送 nIDVerbMin + 1 , 依 次 类 推 。 缺省 的 COleDocument 的 实 现 中 自 动 处 理 了 这 个 特 性 。

你 必 须 在 客 户 应 用 程 序 的 资 源 描 述 ( .RC ) 文 件 中 包 含 下 面 的 语 句 :

#include <afxolecl.rc>

请 参 阅 COleDocument

AfxOleSetUserCtrl

void AFXAPI AfxOleSetUserCtrl( BOOL bUserCtrl ); #include <afxdisp.h>

bUserCtrl

指 定 用 户 控 制 标 志 是 要 被 设 置 还 是 被 清 除 。

说 明

该 函 数 设 置 或 清 除 用 户 控 制 标 志 , 在 AfxOleGetUserCtrl 的 参 考 中 对 之 有 解 释 。当 用 户 创 建 或 载 入 一 个 文 档 时 , 框 架 会 调 用 这 个 函 数 , 但 是 不 包 括 文 档 被 间 接的 动 作 , 比 如 在 容 器 应 用 程 序 中 载 入 一 个 嵌 入 对 象 , 打 开 或 创 建 的 情 况 。

如 果 你 的 应 用 程 序 中 有 其 它 动 作 需 要 使 用 户 控 制 应 用 程 序 时 , 调 用 这 个 函 数 。

请 参 阅 AfxOleGetUserCtrl

AfxOleTypeMatchGuid

BOOL AfxOleTypeMatchGuid( LPTYPEINFO pTypeInfo , TYPEDESC FAR*

pTypeDesc ,

REFGUID guidType , ULONG cIndirectionLevels );

返 回 值

如 果 成 功 地 匹 配 , 则 返 回 非 零 值 ; 否 则 返 回 0 。

pTypeInfo

指 向 类 型 信 息 对 象 的 指 针 , 可 以 从 该 对 象 获 得 pTypeDesc

pTypeDesc

指 向 一 个 TYPEDESC 结 构 的 指 针 。

guidType

类 型 的 唯 一 的 ID 。

cIndirectionLevels

间 接 层 次 数 。

说 明

调 用 这 个 函 数 以 确 定 一 个 类 型 描 述 符( 从 类 型 信 息 中 获 得 )是 否 描 述 了 guidType

指 示 的 类 型 。

示 例

检 验 typedesc 是 否 代 表 一 个 IFontDisp 指 针 :

AfxOleTypeMatchGuid( ptypeinfo, &typedesc, IID_IFontDisp, 1);

这 里 IID_IFontDisp 表 明 类 型 类 型 , 间 接 层 次 数 为 1 ( 因 为 这 个 例 子 是 检 验 一 个

简 单 的 指 针 的 ) 。

AfxOleUnlockApp

void AFXAPI AfxOleUnlockApp( ); #include <afxdisp.h>

说 明

减 小 框 架 对 应 用 程 序 的 活 动 对 象 的 计 数 。 更 进 一 步 的 信 息 参 见

AfxOleLockApp 。

当 活 动 对 象 计 数 达 到 0 时 , 就 会 调 用 AfxOleOnReleaseAllObjects 。

请 参 阅 AfxOleLockApp, CCmdTarget::OnFinalRelease

AfxOleUnlockControl

BOOL AFXAPI AfxOleUnlockControl( REFCLSID clsid ); BOOL AFXAPI AfxOleUnlockControl( LPCTSTR lpszProgID );

#include <afxwin.h>

如 果 成 功 地 解 锁 了 控 件 的 类 工 厂 , 则 返 回 非 零 值 , 否 则 返 回 0 。

参 数

clsid

控 件 的 唯 一 的 类 ID 。

lpszProgID

控 件 的 唯 一 的 程 序 ID 。

说 明

该 函 数 解 锁 指 定 控 件 的 类 工 厂 。 控 件 用 AfxOleLockControl 锁 定 后 , 与 之 相 关的 动 态 生 成 的 数 据 就 会 保 留 在 内 存 中 。 这 样 可 以 显 著 地 提 高 控 件 的 显 示 速 度 , 因 为 控 件 不 必 在 每 次 显 示 的 时 候 创 建 和 销 毁 。 当 你 准 备 销 毁 控 件 的 时 候 , 应 该调 用 AfxOleUnlockContro l。

请 参 阅 AfxOleLockControl

AfxOleUnregisterClass

BOOL AFXAPI AfxOleUnregisterClass( REFCLSID clsID , LPCSTR pszProgID );

如 果 成 功 地 注 销 了 控 件 类 或 属 性 页 类 , 则 返 回 非 零 值 。 否 则 返 回 0 。

参 数

clsID

控 件 或 属 性 页 的 唯 一 的 类 ID 。

pszProgID

控 件 或 属 性 页 的 唯 一 的 程 序 ID 。

说 明

该 函 数 从 W indows 的 注 册 数 据 库 中 移 去 控 件 类 或 属 性 页 类 的 入 口 。

请 参 阅 AfxOleRegisterPropertyPageClass , AfxOleRegisterControlClass , AfxOleRegisterTypeLib

AfxOleUnregisterTypeLib

BOOL AFXAPI AfxOleUnregisterTypeLib( REFGUID tlID );

如 果 成 功 地 注 销 了 类 型 库 , 则 返 回 非 零 值 。 否 则 返 回 0 。

参 数

tlID

类 型 库 的 唯 一 的 ID 。

说 明

调 用 这 个 函 数 以 从 W indows 的 注 册 数 据 库 移 去 类 型 库 的 入 口 。

请 参 阅 AfxOleUnregisterClass, AfxOleRegisterTypeLib

AfxParseURL

BOOL AFXAPI AfxParseURL( LPCTSTR pstrUR L, DWORD& dwServiceType , CString& strServer , CString& strObject , INTERNET_PORT& nPort );

返 回 值

如 果 成 功 地 解 析 了 URL , 则 返 回 非 零 值 。 如 果 URL 为 空 或 它 不 包 含 已 知 的

Internet 服 务 类 型 , 则 为 0 。

pstrURL

指 向 包 含 了 要 解 析 的 URL 的 字 符 串 的 指 针 。

dwServiceType

指 明 了 Internet 服 务 的 类 型 。 可 能 的 取 值 如 下 :

  • AFX_INET_SERVICE_FTP

  • AFX_INET_SERVICE_HTTP

  • AFX _INET_SERVICE_HTTPS

  • AFX_INET_SERVICE_GOPHER

  • AFX_INET_SERVICE_FILE

  • AFX_INET_SERVICE_MAILTO

  • AFX_INET_SERVICE_NEWS

  • AFX_INET_SERVICE_NNTP

  • AFX_INET_SERVICE_TELNET

  • AFX_INET_SERVICE_WAIS

  • AFX_INET_SERVICE_MID

  • AFX_INET_SERVICE_CID

  • AFX_INET_SERVICE_PROSPERO

  • AFX_INET_SERVICE_AFS

  • AFX_INET_SERVICE_UNK

strServer

URL 中 服 务 类 型 后 的 第 一 个 部 分 。

strObject

URL 涉 及 的 对 象 ( 可 能 为 空 ) 。

nPort

如 果 存 在 , 则 从 URL 的 服 务 器 或 对 象 部 分 搜 索 出 来 。

说 明

这 个 全 局 函 数 被 用 于 CInternetSession::OpenURL 。 它 解 析 一 个 URL 字 符 串 , 返回 服 务 的 类 型 以 及 其 它 的 内 容 。

例 如 , AfxParseURL 解 析 一 个 如 下 形 式 的 URL :

service://server/dir/dir/object.ext:port, 返 回 的 内 容 如 下 :

strServer = = "server"

strObject = = "/dir/dir/object/object.ext"

nPort = = #port

dwServiceType = = #service

注意 为 了 调 用 这 个 函 数 , 你 必 须 在 项 目 中 包 含 AFXINET .H 。

请 参 阅 AfxGetInternetHandleType

AfxParseURL Ex

BOOL AFXAPI AfxParseURL Ex ( LPCTSTR pstrURL , D W O R D & dwServiceType , CString& strServer , CString& strObjec t, INTERNET_PORT& nPort , CString& strUsernam e, CString& strPassword , D W O R D dwFlags = 0);

返 回 值

如 果 成 功 地 解 析 了 URL , 则 返 回 非 零 值 。 如 果 URL 为 空 或 它 不 包 含 已 知 的

Internet 服 务 类 型 , 则 为 0 。

参 数

pstrURL

指 向 包 含 了 要 解 析 的 URL 的 字 符 串 的 指 针 。

dwServiceType

指 明 了 Internet 服 务 的 类 型 。 可 能 的 取 值 如 下 :

  • AFX_INET_SERVICE_FTP

  • AFX_INET_SERVICE_HTTP

  • AFX _INET_SERVICE_HTTPS

  • AFX_INET_SERVICE_GOPHER

  • AFX_INET_SERVICE_FILE

  • AFX_INET_SERVICE_MAILTO

  • AFX_INET_SERVICE_NEWS

  • AFX_INET_SERVICE_NNTP

  • AFX_INET_SERVICE_TELNET

  • AFX_INET_SERVICE_WAIS

  • AFX_INET_SERVICE_MID

  • AFX_INET_SERVICE_CID

  • AFX_INET_SERVICE_PROSPERO

  • AFX_INET_SERVICE_AFS

  • AFX_INET_SERVICE_UNK

strServer

URL 中 服 务 类 型 后 的 第 一 个 部 分 。

strObject

URL 涉 及 的 对 象 ( 可 能 为 空 ) 。

nPort

如 果 存 在 , 则 从 URL 的 服 务 器 或 对 象 部 分 搜 索 出 来 。

strUserName

对 包 含 用 户 名 字 的 CString 对 象 的 引 用 。

strPassword

对 包 含 了 用 户 密 码 的 CString 对 象 的 引 用 。

dwFlags

控制 URL 的 解 析 方 式 的 标 志 。 可 能 是 下 列 值 的 组 合 :

取值 含 义

ICU_DECODE 把 %XX 转 义 序 列 转 换 为 字 符

ICU_NO_ENCODE 不 把 不 安 全 的 字 符 转 换 为 转 义 序 列

ICU_NO_META 不 把 URL 中 的 meta 序 列( 如“ \.”和“ \..”) 移 去

ICU_ENCODE_SPACES_ONLY 仅 解 码 空 间

ICU_BROWSER_MODE 不 对 ‘ # ’ 和 ‘ ? ’ 后 面 的 字 符 进 行 编 码

或 解 码 , 并 且 也 不 把 '?' 后 面 的 空 白 字 符移 去 。 如 果 没 有 指 定 这 个 值 , 将 会 对 整个 URL 进 行 编 码 , 后 面 的 空 白 字 符 也会 被 移 去

如 果 你 使 用 MFC 的 缺 省 条 件 , 则 没 有 设 置 标 志 , 这 个 函 数 将 把 所 有 不 安 全 的字 符 和 meta 序 列 (如 \., \..和 \… ) 转 换 为 转 义 序 列 。

说 明

这 个 全 局 函 数 是 AfxParseURL 的 扩 展 版 本 , 被 用 于 CInternetSession::OpenURL 。它 解 析 一 个 URL 字 符 串 , 返 回 服 务 的 类 型 以 及 其 它 的 内 容 , 同 时 提 供 用 户 的名 字 和 密 码 。 标 志 指 明 了 如 何 处 理 不 安 全 的 字 符 。

注意 为 了 调 用 这 个 函 数 , 你 必 须 在 项 目 中 包 含 AFXINET.H 。

请 参 阅 AfxGetInternetHandleType

AfxRegisterClass

BOOL AFXAPI AfxRegisterClass( WNDCLASS* lpWndClass );

返 回 值

如 果 成 功 地 注 册 了 这 个 类 , 则 返 回 TRU E , 否 则 返 回 FALSE 。

参 数

lpWndClass

指 向 一 个 WNDCLASS 结 构 , 它 包 含 了 要 注 册 的 窗 口 类 的 信 息 。 关 于 这个 结 构 的 更 多 的 信 息 , 参 看 W in32 SDK 文 档 。

说 明

利 用 这 个 函 数 在 使 用 MFC 的 DLL 中 注 册 一 个 窗 口 类 。如 果 你 使 用 了 这 个 函 数 , 则 当 DLL 卸 载 时 , 这 个 类 会 自 动 注 销 。

在 非 DLL 项 目 中 , AfxRegiste rClass 标 识 符 被 定 义 为 一 个 宏 , 映 像 到 W indows

函 数 RegisterClass , 因 为 应 用 程 序 中 注 册 的 类 是 自 动 注 销 的 。 如 果 你 用AfxRegisterClass 来 代 替 RegisterClass, 那 么 你 的 代 码 不 管 是 用 于 应 用 程 序 还 是用 于 DLL 都 不 用 于 改 变 。

AfxRegisterWndClass

LPCTSTR AFXAPI AfxRegisterWndClass( UINT nClassStyle , HCURSOR hCursor

= 0, HBRUSH hbrBackground = 0, HICON hIcon = 0 );

返 回 值

  • 个 以 null 结 尾 的 字 符 串 , 其 中 包 含 了 类 名 。 你 可 以 将

    这 个 类 名 传 递 给 CWnd 或 其 派 生 类 的 成 员 函 数 Create 以 创 建 一 个 窗 口 。 这 个 名 字 是 由 微 软 基 础 类 库 生成 的 。

注 意 返 回 值 是 指 向 一 个 静 态 缓 冲 区 的 指 针 。 如 果 要 保 存 这 个 字 符 串 , 将 它 赋 给 一 个 CString 变 量 。

参 数

nClassStyle

指定 W indows 的 类 风 格 或 通 过 位 或 ( |) 操 作 符 生 成 的 风 格 的 组 合 , 用 于

窗 口 类 类 风 格 的 列 表 参 见 W in32 SDK 文 档 中 的 WNDCLASS 结 构 。 如 果这 个 值 为 NULL , 缺 省 的 风 格 如 下 :

  • 将 鼠 标 风 格 设 为 CS_DBLCLICK S, 当 用 户 双 击 鼠 标 时 , 将

    向 窗 口 过 程发 送 双 击 消 息 。

  • 将 鼠 标 光 标 风 格 设 为 W indows 的 标 准 风 格 IDC_ARROW 。

  • 将 背 景 刷 子 设 为 NULL , 因 此 窗 口 将 不 会 擦 去 它 的 背 景

  • 将 图 标 设 为 标 准 的 波 浪 标 志 的 W indows 徽 标 。

hCursor

指 定 了 一 个 鼠 标 光 标 资 源 句 柄 , 将 被 用 于 该 窗 口 类 所 创 建 的 每 个 窗 口 。如 果 你 使 用 缺 省 值 0 , 你 将 得 到 标 准 的 IDC_ARROW 光 标 。

hbrBackground

指 定 了 一 个 刷 子 资 源 句 柄 , 将 被 用 于 该 窗 口 类 所 创 建 的 每 个 窗 口 。

如 果 你 使 用 缺 省 值 0 , 你 将 获 得 一 个 Null 背 景 刷 子 , 同 时 在

WM_ERASEBKGND 进 程 中 , 窗 口 将 不 会 释 放 其 背 景 。

hIcon

指 定 了 一 个 图 标 资 源 句 柄 , 将 被 用 于 该 窗 口 类 所 创 建 的 每 个 窗 口 。如 果 你 使 用 缺 省 值 0 , 你 将 得 到 标 准 的 波 浪 标 志 的 W indows 徽 标 。

微 软 基 础 类 库 自 动 注 册 了 一 些 标 准 的 窗 口 类 。 如 果 你 希 望 注 册 自 己 的 窗 口 类 , 可 以 调 用 这 个 函 数 。

AfxRegisterWndClass 为 类 注 册 的 名 字 仅 与 参 数 有 关 。 如 果 你 用 相 同 的 参 数 多 次调 用 了 AfxRegisterWndClass , 它 仅 在 第 一 次 调 用 时 才 注 册 类 。 随 后 用 相 同 的 参数 进 行 调 用 仅 简 单 地 返 回 以 及 注 册 的 类 名 。

如 果 你 用 相 同 的 参 数 为 多 个 CWnd 的 派 生 类 调 用 了 AfxRegisterWndClass, 而 不是 为 每 个 类 生 成 一 个 独 立 的 窗 口 类 , 那 么 所 有 的 类 共 用 相 同 的 窗 口 类 。 如 果 使用 了 CS_CLASSDC 风 格 , 这 就 会 引 起 问 题 。 你 将 获 得 一 个 CS_CLASSDC 窗口 类 , 而 不 是 多 个 CS_CLASSDC 窗 口 类 , 并 且 使 用 这 个 类 的 所 有 的 C++ 窗 口都 共 用 相 同 的 D C 。 为 了 避 免 这 个 问 题 , 可 以 调 用 AfxRegisterClass 来 注 册 类 。

请 参 阅 CWnd::Create, CWnd::PreCreateWindow, WNDCLASS AfxRegisterClass

AfxSetAllocHook

AFX_ALLOC_HOOK AfxSetAllocHook( AFX_ALLOC_HOOK pfnAllocHook );

返 回 值

如 果 你 希 望 允 许 分 配 , 则 返 回 非 零 值 。 否 则 返 回 0 。

pfnAllocHook

指 定 要 调 用 的 函 数 名 。 参 考 关 于 分 配 函 数 的 原 型 的 说 明 。

说 明

这 个 函 数 设 置 一 个 钩 子 , 使 每 次 分 配 内 存 之 前 都 会 调 用 一 个 指 定 的 函 数 。 微 软基 础 类 库 中 的 调 试 内 存 分 配 函 数 能 够 调 用 一 个 用 户 定 义 的 钩 子 函 数 , 使 用 户 能够 监 控 内 存 分 配 并 控 制 是 否 允 许 分 配 内 存 。 内 存 分 配 的 钩 子 函 数 的 原 型 如 下 :

BOOL AFXAPI AllocHook( size_t nSize, BOOL bObject, LONG lRequestNumber );

nSize

计 划 分 配 的 内 存 大 小 。

bObject

如 果 是 要 为 一 个 CObject 派 生 类 对 象 分 配 内 存 则 为 TRUE , 否 则 为

FALSE 。

lRequestNumber

内 存 分 配 的 系 列 号 。

注意 , AFXAPI 调 用 约 定 意 味 着 调 用 者 必 须 从 栈 中 清 除 参 数 。

AfxSetResourceHandle

void AfxSetResourceHandle( HINSTANCE hInstResource );

参 数

hInstResource

应 用 程 序 调 入 资 源 的 .EXE 或 .DLL 文 件 的 实 例 或 模 块 句 柄 。

说 明

使 用 这 个 函 数 来 设 置 HINSTANCE 句 柄 , 决 定 应 用 程 序 的 缺 省 资 源 从 哪 儿 载入 。

请 参 阅 AfxGetInstanceHandle, AfxGetResourceHandle

AfxSocketInit

BOOL AfxSocketInit( WSADATA* lpwsaData = NULL );

返 回 值

如 果 函 数 成 功 执 行 , 则 返 回 非 零 值 , 否 则 为 0 。

参 数

lpwsaData

指向 WSADATA 结 构 的 指 针 。 如 果 lpwsaData 不 等 于 NULL , 那 么 调用 :: WSAStartup 将 填 充 WSADATA 结 构 。 这 个 函 数 同 时 也 保 证 在 应 用 程序 之 前 调 用 ::WSACleanup 。

说 明

在 你 重 载 的 C W inApp::InitInstance 函 数 中 调 用 这 个 函 数 以 初 始 化 W indows Sockets 。

请 参 阅 CWinApp::InitInstance

AFX_SQL_ASYNC

AFX_SQL_ASYNC( prs , SQLFunc )

参 数

prs

指向 CRecordset 对 象 或 者 CDatabase 对 象 的 指 针 。 从 MFC4.2 开 始 , 这个 参 数 就 被 忽 略 。

SQLFunc

一 个 ODBC 的 API 函 数 。 有 关 ODBC 的 API 函 数 的 更 多 的 信 息 请 参 见

《 ODBC SDK 程 序 员 参 考 》 。

说 明

在 MFC4.2 中 , 这 个 宏 的 实 现 有 了 变 化 。 现 在 AFX_SQL_ASYNC 只 是 简 单 地调 用 AFX_ODBC_CALL 宏 , 并 且 忽 略 了 prs 参 数 。 在 MFC 的 以 前 的 版 本 中 , AFX_SQL_ASYNC 被 用 于 调 用 可 能 返 回 SQL_STILL_EXECUTING 的 ODBC API 函 数 。 如 果 一 个 ODBC 的 API 函 数 返 回 了 SQL_STILL_EXECUTING , AFX_SQL_ASYNC 就 会 调 用

prs> OnWaitForDataSource

注意 现 在 MFC 的 ODBC 类 仅 使 用 同 步 处 理 。 如 果 要 实 现 异 步 操 作 , 你 必须 调 用 ODBC 的 API 函 数 SQLSetConnectOption 。 相 关 的 更 多 的 信 息 请 参考 《 ODBC SDK 程 序 员 参 考 》 中 的 主 题 : “ 异 步 执 行 函 数 。 ”

请 参 阅 AFX_ODBC_CALL, AFX_SQL_SYNC

AFX_SQL_SYNC

AFX_SQL_SYNC( SQLFunc )

参 数

SQLFunc

一个 ODBC 的 API 函 数 。关 于 这 些 函 数 的 更 多 的 信 息 ,参 看《 ODBC SDK

程 序 员 参 考 》 。

说 明

AFX_SQL_SYNC 宏 简 单 地 调 用 函 数 SQLFunc 。 利 用 这 个 宏 来 调 用 不 会 返 回

SQL_STILL_EXECUTING 的 ODBC API 函 数 。

在 调 用 AFX_SQL_SYNC 之 前 , 你 必 须 声 明 一 个 RETCODE 类 型 的 变 量

nRetCode 。 你 可 以 在 调 用 宏 之 后 检 查 nRetCode 的 值 。

注 意 在 MFC4.2 中 AFX_SQL_SYNC 的 实 现 以 及 改 变 了 。 因 为 不 再 需 要 检 查 服务 器 的 状 态 , AFX_SQL_SYNC 简 单 地 将 一 个 值 赋 给 nRetCode 。 例 如 , 你 不 需要 进 行 下 面 的 调 用 调 用 :

AFX_SQL_SYNC( ::SQLGetInfo( .. ) )

而 是 可 以 简 单 地 进 行 赋 值 :

nRetCode = ::SQLGetInfo( .. );

请 参 阅 AFX_SQL_ASYNC, AFX_ODBC_CALL

AfxTermExtensionModule

void AFXAPI AfxTermExtensionModule( AFX_EXTENSION_MODULE& state , BOOL bAll = FALSE );

参 数

state

bAll

对 一 个 AFX_ EXTENSION_MODULE 结 构 的 引 用 , 其 中 包 含 了 扩 展 DLL

模 块 的 状 态 。

如 果 为 TRUE , 清 除 所 有 的 扩 展 DLL 模 块 。 否 则 , 只 清 除 当 前 的 DLL

模 块 。

说 明

调 用 这 个 函 数 , 使 每 个 进 程 与 DLL 分 离 ( 这 在 进 程 退 出 时 发 生 , 或 者 是 由 于调 用 了 AfxFreeLibrary , DLL 被 卸 载 ) 的 时 候 MFC 可 以 清 除 扩 展 DLL 。AfxTermExtensionModule 将 删 除 所 有 与 模 块 相 连 的 局 部 内 容 并 从 消 息 映 射 中 除去 所 有 的 入 口 。 例 如 :

static AFX_EXTENSION_MODULE extensionDLL; extern "C" int APIENTRY

D llM ain(HINSTANCE hInstance, DWORD dwReason, LPVOID)

{

if (dwReason == DLL_PROCESS_ATTACH)

{

// 扩 展 DLL 的 一 次 性 初 始 化

if (!AfxInitExtensionModule( extensionDLL, hInstance)) return 0;

// 任 务 : 执 行 其 它 的 初 始 化 工 作

}

else if (dwReason == DLL_PROCESS_DETACH)

{

// 扩 展 DLL 的 每 个 进 程 结 束

AfxTermExtensionModule(extensionDLL);

// 任 务 : 执 行 其 它 的 清 除 工 作 。

}

return 1; // 完成

}

如 果 你 的 应 用 程 序 动 态 地 载 入 、 释 放 扩 展 DLL , 确 保 调 用 了AfxTermExtensionModule 。 因 为 大 多 数 扩 展 DLL 不 是 动 态 载 入 ( 通 常 , 它 们 与其 引 入 库 相 连 接 ) 的 , 通 常 没 有 必 要 调 用 AfxTermExtensionModule 。

MFC 的 扩 展 DLL 需 要 在 它 们 的 D llMain 中 调 用 A fxInitExtension Module 。 如 果

DLL 将 输 出 CRuntimeClass 对 象 或 者 具 有 它 自 己 的 资 源 , 你 也 需 要 在 D llMain

中 创 建 CDynLinkLibrary 对 象 。

请 参 阅 AfxInitExtensionModule

AfxThrowArchiveException

void AfxThrowArchiveException( int cause , LPCTSTR lpszArchiveName );

参 数

cause

指 定 一 个 整 数 , 代 表 了 异 常 的 原 因 。 其 可 能 取 值 的 列 表 参 见

CArchiveExcepti- on::m_cause 。

lpszArchiveName

指 向 一 个 字 符 串 , 其 中 包 含 了 引 起 异 常 的 CArchive 对 象 的 名 字 。

说 明

抛 出 一 个 档 案 异 常 。

请 参 阅 CArchiveException, THROW

AfxThrowDaoException

void AFXAPI AfxThrowDaoException( int nAfxDaoError = NO_AFX_DAO_ERROR, SCODE scode = S_OK );

参 数

nAfxDaoError

一 个 整 数 值 , 代 表 DAO 的 扩 展 错 误 码 , 其 值 可 能 是

CDaoException::m_nAfxDaoError 中 列 出 的 值 之 一 。

scode

DAO 产 生 的 一 个 SCODE 类 型 的 OLE 错 误 码 。相 关 信 息 参 见 CdaoExcepti - on::m_scode 。

说 明

调 用 这 个 函 数 从 你 的 代 码 中 抛 出 一 个 CDaoException 类 型 的 异 常 。 框 架 还 调 用了 AfxThrowDaoException 。 在 你 的 调 用 中 , 你 可 以 传 递 一 个 参 数 , 也 可 以 都 传递 。 例 如 , 如 果 你 希 望 引 出 CDaoException::nAfxDaoError 中 定 义 的 一 个 错 误 但是 并 不 关 心 scode 参 数 , 可 以 传 递 一 个 有 效 的 nAfxDaoError 参 数 , 同 时 接 受 缺省 的 scode 值 。

有 关 与 MFC 的 DAO 类 相 关 的 异 常 的 更 多 信 息 可 以 参 见 本 书 中 的 CDaoException

请 参 阅 CException

AfxThrowDBException

void AfxThrowDBException( RETCODE nRetCode , CDatabase* pdb , HSTMT

hstmt );

参 数

nRetCode

一个 RETCODE 类 型 的 值 , 定 义 了 引 起 被 抛 出 异 常 的 错 误 的 类 型 。

pdb hstmt

指向 CDatabase 对 象 的 指 针 , 代 表 与 异 常 相 关 的 数 据 源 连 接 。一个 ODBC 的 HSTMT 句 柄 , 代 表 与 异 常 相 关 的 语 句 句 柄 。

说 明

调 用 这 个 函 数 , 从 你 自 己 的 代 码 中 抛 出 一 个 CDBException 类 型 的 异 常 。 如 果框 架 收 到 了 一 个 ODBC API 函 数 的 RETCOD E , 并 且 将 其 解 释 为 异 常 而 不 是 可

读 磁 盘 错 误 而 失 败 。

有 关 ODBC 定 义 的 RETCODE 的 信 息 参 见 《 ODBC SDK 程 序 员 参 考 》 中 的 第八 章 :“ 获 得 状 态 和 错 误 信 息 ”。关 于 MFC 对 这 些 代 码 的 扩 展 参 见 CDBException 类 。

请 参 阅 CDBException::m_nRetCode

AfxThrowFileException

void AfxThrowFileException( int cause , LONG lOsError = – 1, LPCTSTR

lpszFileName = NULL );

参 数

cause

指 定 了 一 个 整 数 , 它 指 明 了 异 常 的 原 因 。 其 可 能 取 值 的 列 表 参 见

CfileExceptio - n::m_cause 。

lOsError

包 含 了 操 作 系 统 的 错 误 号 码 ( 如 果 有 的 话 ) , 它 描 述 了 异 常 的 原 因 。 错误 码 的 列 表 参 见 你 的 操 作 系 统 手 册 。

lpszFileName

指 向 一 个 字 符 串 , 包 含 了 引 起 异 常 的 文 件 的 名 字 。

说 明

这 个 函 数 抛 出 一 个 文 件 异 常 。 你 必 须 根 据 操 作 系 统 的 错 误 码 确 定 异 常 的 原 因 。

请 参 阅 CFileException::ThrowOsError, THROW

AfxThrowInternetException

void AFXAPI AfxThrowInternetException( DWORD dwContext , DWORD dwError

= 0 );

参 数

dwContext

引 起 错 误 的 操 作 的 环 境 标 识 符 。 dwContext 的 缺 省 值 由 CInternetSession 指 定 , 并 被 传 递 给 CInternetConnection 和 CInternetFile 的 派 生 类 。 对 于针 对 连 接 或 文 件 的 特 定 操 作 , 你 通 常 会 用 自 己 的 值 覆 盖 缺 省 的 dwContext 值 。 这 个 值 将 被 返 回 到 CinternetSession:: OnStatusCallback 以 标 识 特 定 的操 作 状 态 。 有 关 环 境 标 识 符 的 更 多 的 信 息 请 参 见 《 Visual C++ 程 序 员 指南 》 中 的 文 章 : “ Internet 第 一 步 : W inInet” 。

dwError

引 起 异 常 的 错 误 。

说 明

这 个 函 数 抛 出 一 个 Internet 异 常 。 你 必 须 根 据 操 作 系 统 的 错 误 码 来 确 定 异 常 的原 因 。

注意 为 了 调 用 这 个 函 数 , 你 必 须 在 项 目 中 包 含 AFXINET.H 。

请 参 阅 CInternetException, THROW AfxThrowMemoryException

void AfxThrowMemoryException( );

说 明

这 个 函 数 抛 出 一 个 内 存 异 常 。 如 果 调 用 系 统 的 内 存 分 配 函 数 ( 例 如 malloc 以 及W indows 函 数 G lobalAlloc) 失 败 了 , 就 调 用 这 个 函 数 。 你 不 需 要 为 new 调 用这 个 函 数 , 因 为 如 果 内 存 分 配 失 败 , new 会 自 动 抛 出 一 个 内 存 异 常 。

请 参 阅 CMemoryException, THROW

AfxThrowNotSupportedException

void AfxThrowNotSupportedException( );

说 明

抛 出 的 异 常 是 请 求 不 支 持 的 特 性 的 结 果 。

请 参 阅 CNotSupportedException, THROW

AfxThrowOleDispatchException

void AFXAPI AfxThrowOleDispatchException( WORD wCode , LPCSTR

lpszDescription , UINT nHelpID = 0 );

void AFXAPI AfxThrowOleDispatchException( WORD wCode , UINT

nDescriptionID , UINT nHelpID = – 1 ); #include <afxdisp.h>

参 数

wCode

你 的 应 用 程 序 特 有 的 错 误 码 。

lpszDescription

错 误 的 语 言 描 述 。

nDescriptionID

错 误 的 语 言 描 述 的 资 源 ID 。

nHelpID

你 的 应 用 程 序 的 帮 助 文 件 ( .HLP ) 的 帮 助 环 境 。

说 明

使 用 这 个 函 数 在 一 个 OLE 自 动 化 函 数 内 部 抛 出 一 个 异 常 。 为 这 个 函 数 提 供 的信 息 可 以 被 控 制 应 用 程 序 ( M icrosoft Visual Basic 或 其 它 OLE 自 动 化 的 客 户 程序 ) 所 显 示 。

请 参 阅 COleException

AfxThrowOleException

void AFXAPI AfxThrowOleException( SCODE sc ); void AFXAPI AfxThrowOleException( HRESULT hr );

#include <afxdisp.h>

参 数

sc

指 明 异 常 原 因 的 OLE 状 态 代 码 。

hr

指 明 异 常 原 因 的 结 果 代 码 的 句 柄 。

说 明

这 个 函 数 生 成 一 个 COleException 类 型 的 对 象 并 抛 出 一 个 异 常 。 接 收 HRESULT 类 型 的 参 数 的 版 本 将 结 果 代 码 转 换 为 对 应 的 SCOD E 。有 关 HRESULT 和 SCODE 的 更 多 的 信 息 参 见 《 Platform SDK 》 中 的 “ COM 错 误 代 码 的 结 构 ” 。

请 参 阅 COleException, THROW

AfxThrowResourceException

void AfxThrowResourceException( );

说 明

这 个 函 数 抛 出 一 个 资 源 异 常 。 通 常 在 不 能 载 入 W indows 资 源 的 时 候 调 用 这 个 函数 。

AfxThrowUserException

void AfxThrowUserException( );

说 明

这 个 函 数 抛 出 一 个 异 常 , 结 束 一 个 终 止 用 户 操 作 。 通 常 在 AfxMessageBox 向 用户 报 告 了 一 个 错 误 之 后 会 立 即 调 用 这 个 函 数 。

请 参 阅 CUserException, THROW, AfxMessageBox

afxTraceEnabled

BOOL afxTraceEnabled;

说 明

这 是 一 个 全 局 变 量 , 用 于 打 开 或 关 闭 TRACE 宏 的 输 出 。

在 缺 省 情 况 下 ,TRACE 宏 的 输 出 是 被 关 闭 的 。如 果 你 希 望 你 的 程 序 中 的 TRACE

宏 产 生 输 出 , 则 应 将 afxTraceEnabled 设 置 为 非 零 值 。

TRACER.EXE 工 具 设 置 afxTraceEnabled 的 值 。 更 多 的 信 息 请 参 考 “ 技 术 注 释

7 ” 。

请 参 阅 afxTraceFlags, TRACE

afxTraceFlags

int afxTraceFlags;

说 明

用 于 打 开 微 软 基 础 类 库 的 内 建 报 告 特 性 。

这 个 变 量 可 以 通 过 程 序 来 设 置 也 可 以 在 调 试 器 中 设 置 。 afxTraceFlags 的 每 一 位选 择 了 一 个 跟 踪 报 告 选 项 。 你 可 以 利 用 TRACER.EXE 打 开 或 关 闭 这 些 位 中 的任 意 一 个 。 没 有 必 要 手 动 设 置 这 些 位 。

下 面 是 这 些 位 模 板 以 及 相 应 的 跟 踪 报 告 特 性 的 列 表 :

  • 0x01 多 应 用 程 序 调 试 。 这 将 会 在 每 个 TRACE 输 出 之 前 加

    上 应 用 程 序 的名 字 作 为 前 缀 , 它 既 会 影 响 你 的 应 用 程 序 的 TRACE 输 出 , 也 会 影 响 下 面描 述 的 附 加 的 报 告 特 性 。

  • 0x02 主 消 息 泵 。 报 告 在 主 C W inApp 消 息 处 理 机 制 中 接 收

    到 的 每 个 消 息 。

报 告 发 生 在 对 W indows 函 数 GetMessage 的 调 用 之 后 , 但 是 在 任 何 对 消 息的 翻 译 或 分 发 之 前 。

动 态 数 据 交 换 消 息 将 显 示 一 些 额 外 的 数 据 , 可 以 被 OLE 中 的 一 些 调 试 方 式所 使 用 。

这 个 标 志 仅 显 示 接 收 到 的 消 息 , 而 不 包 括 那 些 发 出 的 消 息 。

  • 0x04 与 上 面 的 0x02 选 项 类 似 的 主 消 息 调 度 , 但 是 适 用

    于 在CWnd:: W indowProc 中 分 发 的 消 息 , 并 且 对 接 收 到 的 和 发 送 出 去 的 消 息 都作 处 理 。

  • 0x08 W M _ C O M M A N D 消 息 调 度 。 一 个 特 殊 的 情 况 , 用

    于 扩 展

WM_COMMAND/On-Command 处 理 , 报 告 命 令 路 径 机 制 的 进 度 。

同 时 报 告 哪 个 类 接 收 了 命 令 ( 如 果 有 匹 配 的 消 息 映 射 入 口 ) , 以 及 什 么 时候 类 不 接 收 命 令 ( 如 果 没 有 匹 配 的 消 息 映 射 入 口 ) 。 在 跟 踪 多 文 档 界 面

( MD I ) 应 用 程 序 的 命 令 消 息 流 的 时 候 , 这 个 报 告 特 别 有 用 。

  • 0x10 OLE 跟 踪 。 报 告 重 要 的 OLE 通 知 或 请 求 。

为 OLE 服 务 器 或 客 户 打 开 这 个 选 项 以 跟 踪 OLE DLL 和 OLE 应 用 程 序 之间 的 通 讯 。

  • 0x20 数 据 库 跟 踪 。 报 告 ODBC 类 和 DAO 类 的 警 告 , 对 于 DAO

    类 还 有

个 选 项 。 对 于 ODBC , 你 只 能 得 到 警 告 , 例 如 在 DFX 调 用 中 发 生 的 类 型不 匹 配 。 对 于 DAO , 你 可 以 得 到 所 有 异 常 的 信 息 , 包 括 发 生 异 常 的 DAO 或 MFC 的 DAO 类 中 的 线 路 和 函 数 。

相 关 的 更 多 的 信 息 参 见 《 V isual C++ 文 档 》 中 的 “ 技 术 注 释 7 ” 。

请 参 阅 afxTraceEnabled, TRACE

AfxVerifyLicFile

BOOL AFXAPI AfxVerifyLicFile(HINSTANCE hInstance ,LPCTSTR

pszLicFileName ,LPOLE- STR pszLicFileContents , UINT cch = – 1 );

返 回 值

如 果 存 在 许 可 文 件 并 且 是 以 pszLicFileContents 中 的 字 符 序 列 开 始 的 , 则 返 回 非零 值 ; 否 则 返 回 0 。

参 数

hInstance

与 许 可 控 制 相 关 的 DLL 的 实 例 句 柄 。

pszLicFileName

指 向 一 个 以 null 结 尾 的 字 符 串 , 包 含 了 许 可 文 件 的 名 字 。

pszLicFileContents

指 向 一 个 字 节 序 列 , 它 必 须 与 许 可 文 件 开 头 的 序 列 匹 配 。

cch

pszLicFileContents 中 的 字 符 数 目 。

说 明

调 用 这 个 函 数 以 检 验 由 pszLicFileName 指 定 文 件 名 的 许 可 文 件 是 否 对 OLE 控件 有 效 。 如 果 cch 为 - 1 , 这 个 函 数 将 使 用 :

_tcslen(pszLicFileContents)

请 参 阅 COleObjectFactory::VerifyUserLicense

AfxWinInit

BOOL AFXAPI AfxWinInit( HINSTANCE hInstance , HINSTANCE hPrevInstance , LPTSTR lpCmdLine , int nCmdShow )

参 数

hInstance

当 前 运 行 模 块 的 句 柄 。

hPrevInstance

应 用 程 序 前 一 个 实 例 的 句 柄 。 对 于 基 于 W in32 的 应 用 程 序 , 这 个 参 数 总是 NULL 。

lpCmdLine

指 向 一 个 以 null 结 尾 的 字 符 串 , 指 定 了 应 用 程 序 的 命 令 行 。

nCmdShow

指 定 了 G U I 应 用 程 序 的 主 窗 口 将 如 何 显 示 。

说 明

这 个 函 数 是 由 MFC 提 供 的 W in M ain 函 数 调 用 的 , 它 是 基 于 GUI 的 应 用 程 序 的C W inApp 初 始 化 的 一 部 分 , 主 要 用 来 初 始 化 MFC 。 对 于 控 制 台 应 用 程 序 , 不使 用 MFC 提 供 的 W inMain 函 数 , 你 必 须 直 接 调 用 AfxWinInit 来 初 始 化 MFC 。

如 果 你 自 己 调 用 AfxWinInit , 你 必 须 声 明 一 个 C W inApp 类 的 实 例 。 对 于 控 制台 应 用 程 序 , 你 可 以 选 择 不 从 C W inApp 基 础 你 自 己 的 类 , 而 是 直 接 使 用C W inApp 的 实 例 。 如 果 你 决 定 在 你 的 main 函 数 的 实 现 中 将 所 有 的 工 作 留 给 你的 应 用 程 序 , 这 样 做 是 可 以 的 。

例 子 程 序 TEAR 演 示 了 如 何 用 MFC 生 成 一 个 控 制 台 应 用 程 序 。

示 例

// this file must be compiled with the /GX and /MT options:

// cl /GX /MT thisfile.cpp #include <afx.h>

#include <afxdb.h>

#include <iostream.h> int main()

{

// 试 图 初 始 化 MFC

if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))

{

cerr << "MFC failed to initialize!" << endl; return 1;

}

// 试 图 与 并 不 存 在 的 ODBC 数 据 库 连 接

// ( 如 果 不 初 始 化 MFC , 这 根 本 不 会 起 作 用 。 )

CDatabase db; try

{

db.Open("This Databsae Doesn't Exist");

// 我 们 不 会 真 正 到 达 这 里 。

cout << "Successful!" << endl; cout << "Closing ... "; db.Close();

cout << "Closed!" << endl;

}

catch (CDBException* pEx)

{

// 我 们 到 达 了 一 个 异 常 。 输 出 错 误 信 息 。

// ( 如 果 不 初 始 化 MFC , 这 根 本 不 会 起 作 用 。 )

char sz[1024]; cout << "Error: ";

if (pEx->GetErrorMessage(sz, 1024)) cout << sz;

else

cout << "No error message was available";

cout << endl; pEx->Delete(); return 1;

}

return 0;

}

AND_CATCH

AND_CATCH( exception _ class , exception _ objec t_ pointer _ name )

参 数

exception _ class

指 定 了 要 检 测 的 异 常 类 型 。 标 准 的 异 常 类 的 列 表 参 见 CException 类 。

exception _ objec t_ pointer _ name

这 个 宏 将 生 成 的 异 常 对 象 的 指 针 的 名 字 。 你 可 以 使 用 这 个 指 针 名 在

AND_CATCH 块 中 访 问 异 常 对 象 。 这 个 变 量 是 为 你 定 义 的 。

说 明

定 义 了 一 个 代 码 块 , 用 于 捕 捉 前 面 的 TRY 块 中 抛 出 的 附 加 的 异 常 类 型 。 使 用CATCH 宏 来 捕 捉 一 个 异 常 类 型 , 然 后 用 AND_CATCH 宏 来 捕 捉 后 面 的 类 型 。用 END_CATCH 宏 来 结 束 TRY 块 。

异 常 处 理 代 码 能 够 检 验 异 常 对 象 以 获 得 有 关 异 常 原 因 的 更 多 信 息 。 在

AND_CATCH 块 内 调 用 THROW_LAST 宏 , 这 样 可 以 将 处 理 权 移 交 给 下 一 个

注意 AND_CATCH 块 被 定 义 为 一 个 C++ 作 用 域 ( 用 大 括 号 分 界 ) 。 如 果 你在 这 个 作 用 域 内 定 义 了 一 个 变 量 , 记 住 它 们 仅 能 在 此 作 用 域 内 访 问 。 这也 适 用 于 exception _ object _ pointer _ name 变 量 。

请 参 阅 TRY, CATCH, END_CATCH, THROW, THROW_LAST,

AND_CATCH_ALL, Cexception

AND_CATCH_ALL

AND_CATCH_ALL( exception _ object _ pointe r_ name )

参 数

exception _ objec t_ pointer _ name

这 个 宏 将 生 成 的 异 常 对 象 的 指 针 的 名 字 。 你 可 以 使 用 这 个 指 针 名 在

AND_CATCH_ALL 块 中 访 问 异 常 对 象 。 这 个 变 量 是 为 你 定 义 的 。

说 明

定 义 了 一 个 代 码 块 , 用 于 捕 捉 前 面 的 TRY 块 中 抛 出 的 附 加 的 异 常 类 型 。 使 用

CATCH 宏 来 捕 捉 一 个 异 常 类 型 , 然 后 用 AND_CATCH_ALL 宏 来 捕 捉 所 有 其

TRY 块 。

异 常 处 理 代 码 能 够 检 验 异 常 对 象 以 获 得 有 关 异 常 原 因 的 更 多 信 息 。 在AND_CATCH_ALL 块 内 调 用 THROW_LAST 宏 , 这 样 可 以 将 处 理 权 移 交 给 下一 个 异 常 框 架 。AND_CATCH_ALL 标 记 了 前 面 的 CATCH 或 AND_CATCH_ALL 块 的 结 束 。

注意 AND_CATCH_ALL 块 被 定 义 为 一 个 C++ 作 用 域 ( 用 大 括 号 分 界 ) 。 如果 你 在 这 个 作 用 域 内 定 义 了 一 个 变 量 , 记 住 它 们 仅 能 在 此 作 用 域 内 访 问 。

请 参 阅

TRY,CATCH_ALL,END_CATCH_ALL,THROW,

THROW_LAST,AND_CATCH, Cexception

ASSERT

ASSERT( booleanExpression )

参 数

booleanExpression

指 定 了 一 个 表 达 式 ( 包 含 指 针 变 量 ) , 其 计 算 结 果 为 非 零 值 或 0 。

说 明

这 个 宏 计 算 它 的 参 数 。 如 果 结 果 为 0 , 则 输 出 一 个 调 试 信 息 并 退 出 程 序 。 如 果结 果 为 非 零 值 , 它 什 么 也 不 做 。

诊 断 信 息 具 有 如 下 形 式 :

assertion failed in file <name> in line <num>

这 里 的 name 是 源 文 件 的 名 字 , num 是 源 文 件 中 断 言 失 败 位 置 的 行 号 。

在 MFC 的 发 行 版 本 中 , ASSERT 并 不 计 算 表 达 式 的 值 , 因 而 也 不 会 中 断 程 序 。如 果 不 管 环 境 如 何 , 表 达 式 都 必 须 被 计 算 , 用 VERIFY 宏 来 代 替 ASSERT 。

注意 这 个 函 数 仅 在 MFC 的 调 试 版 本 中 有 效 。

// ASSERT 的 例 子

CAge* pcage = new CAge( 21 ); // CAge is derived from CObject. ASSERT( pcage!= NULL )

ASSERT( pcage->IsKindOf( RUNTIME_CLASS( CAge ) ) )

// 仅当 pcage 不 是 一 个 CAge* 指 针 时 才 结 束 程 序 。

请 参 阅 VERIFY

ASSERT_KINDOF

ASSERT_KINDOF( classnam e, pobject )

参 数

classname

CObject 派 生 类 的 名 字 。

pobject

类 对 象 的 指 针 。

这 个 宏 断 言 指 向 的 对 象 属 于 指 定 的 类 , 或 者 属 于 从 指 定 的 类 继 承 的 类 。 pobject 参 数 应 该 是 指 向 一 个 对 象 的 指 针 , 可 以 是 const 类 型 的 。 指 向 的 对 象 和 类 必 须支 持 CObject 运 行 时 类 信 息 。 作 为 一 个 例 子 , 要 确 定 pDocument 是 否 是CMyDocument 类 或 者 它 的 任 何 派 生 类 的 对 象 的 指 针 , 你 可 以 这 么 写 : ASSERT_KINDOF(CMyDocument, pDocument)

使 用 ASSERT_KINDOF 宏 的 作 用 与 下 述 代 码 完 全 相 同 :

ASSERT(pobject->IsKindOf(RUNTIME_CLASS(classname)));

这 个 函 数 仅 对 用 DECLARE_DYNAMIC 或 DECLARE_SERIAL 宏 声 明 的 类 起作 用 。

注意 这 个 函 数 仅 在 MFC 的 调 试 版 本 中 才 有 。

请 参 阅 ASSERT

ASSERT_VALID

ASSERT_VALID( pObject )

参 数

pObject

指 定 了 从 CObject 继 承 的 类 的 对 象 , 它 具 有 AssertValid 成 员 函 数 的 重 载 版本 。

说 明

这 个 函 数 用 于 检 验 你 对 对 象 内 部 状 态 的 有 效 性 的 假 定 。 ASSERT_VALID 调 用作 为 参 数 传 递 给 它 的 对 象 的 AssertValid 成 员 函 数 。

在 MFC 的 发 行 版 本 中 , ASSERT_VALID 什 么 也 不 做 。 在 调 试 版 本 中 , 它 检 验一 个 指 针 是 否 为 NULL , 并 且 调 用 对 象 自 己 的 AssertValid 成 员 函 数 。 如 果 这 些测 试 中 有 些 失 败 了 , 它 就 按 照 与 ASSERT 相 同 的 方 式 显 示 一 个 警 告 信 息 。

注意 这 个 函 数 仅 在 MFC 的 调 试 版 本 中 才 有 。

有 关 的 更 多 信 息 以 及 示 例 参 见《 V isual C++ 程 序 员 指 南 》中 的“ MFC 调 试 支 持 ”。

请 参 阅 ASSERT, VERIFY, CObject, CObject::AssertValid

BASED_CODE

说 明

在 W in32 下 , 这 个 宏 展 开 后 实 际 为 空 , 主 要 是 为 向 后 兼 容 性 提 供 的 。 在 16 位的 MFC 中 , 这 个 宏 确 保 数 据 将 被 放 在 代 码 段 而 不 是 数 据 段 中 。 其 结 果 是 你 的

数 据 段 不 太 紧 凑 了 。

BEGIN_CONNECTION_MAP

BEGIN_CONNECTION_MAP( theClass , theBase )

参 数

theClass

指 定 了 连 接 映 射 所 属 的 控 件 类 的 名 字 。

theBase

指 定 了 theClass 的 基 类 的 名 字 。

说 明

在 你 的 程 序 中 每 个 从 COleControl 继 承 的 类 都 能 为 你 的 控 件 支 持 的 连 接 点 提 供一 个 连 接 映 射 。 在 你 的 类 成 员 函 数 的 实 现 文 件 ( .CPP ) 中 , 用BEGIN_CONNECTION_MAP 宏 开 始 连 接 映 射 的 定 义 , 然 后 用CONNECTION_PART 宏 为 每 个 连 接 点 加 入 一 个 入 口 。 最 后 , 用END_CONNECTION_MAP 宏 结 束 连 接 映 射 。

请 参 阅 BEGIN_CONNECTION_PART, DECLARE_CONNECTION_MAP

BEGIN_CONNECTION_PART( theClass , localClass )

参 数

theClass

指 定 了 连 接 点 所 属 的 控 件 类 的 名 字 。

localClass

指 定 了 实 现 连 接 点 的 本 地 类 的 名 字 。

说 明

利 用 BEGIN_CONNECTION_PART 宏 来 开 始 除 事 件 和 属 性 通 知 连 接 点 之 外 的其 它 类 型 的 连 接 点 定 义 。

在 你 的 类 成 员 函 数 的 声 明 文 件 ( .H ) 中 , 用 BEGIN_CONNECTION_PART 宏来 开 始 连 接 点 定 义 , 然 后 加 入 CONNECTION_IID 宏 以 及 你 想 实 现 的 其 它 成 员函 数 , 最 后 用 END_CONNECTION_PART 宏 结 束 连 接 点 映 射 。

请 参 阅 BEGIN_CONNECTION_MAP, END_CONNECTION_PART, DECLARE_CONNECTION_MAP

BEGIN_DISPATCH_MAP( theClass , baseClass ) #include <afxdisp.h>

参 数

theClass

指 定 拥 有 调 度 映 射 的 类 的 名 字 。

baseClass

指定 theClass 的 基 类 的 名 字 。

说 明

使 用 BEGIN_DISPATCH_MAP 宏 来 声 明 你 的 调 度 映 射 定 义 。

在 你 的 类 的 成 员 函 数 的 实 现 文 件 ( .CPP) 中 , 用 BEGIN_DISPATCH_MAP 宏 开始 调 度 映 射 , 为 每 个 调 度 函 数 和 属 性 加 入 一 个 入 口 , 最 后 用END_DISPATCH_MAP 宏 结 束 调 度 映 射。

请 参 阅 D ispatch Maps, DECLARE_DISPATCH_MAP, END_DISPATCH_MAP, DISP_FUNCTION, DISP_PROPERTY, DISP_PROPERTY_EX, DISP_DEFVALUE

BEGIN_EVENT_MAP( theClass , baseClass )

参 数

theClass

指 定 事 件 映 射 所 属 的 控 件 类 的 名 字 。

baseClass

指定 theClass 的 基 类 的 名 字 。

说 明

使 用 BEGIN_EVENT_MAP 宏 开 始 你 的 事 件 映 射 的 定 义 。

在 你 的 类 的 成 员 函 数 的 实 现 文 件 ( .CPP ) 中 , 使 用 BEGIN_EVENT_MAP 宏 开始 事 件 映 射 , 然 后 为 每 个 事 件 加 入 一 个 入 口 , 最 后 用 END_EVENT_MAP 宏 结束 事 件 映 射 。

关 于 事 件 映 射 和 BEGIN_EVENT_MAP 宏 的 更 多 信 息 参 见 《 V isual C++ 文 档 》中 的 “ ActiveX 控 件 : 事 件 ” 。

请 参 阅 DECLARE_EVENT_MAP, END_EVENT_MAP

BEGIN_EVENTSINK_MAP( theClass , baseClass )

参 数

theClass

指 定 了 事 件 接 收 映 射 所 属 的 控 件 类 的 名 字 。

baseClass

指 定 了 theClass 的 基 类 的 名 字 。

说 明

使 用 BEGIN_EVENTSINK_MAP 宏 开 始 你 的 事 件 接 收 映 射 的 定 义 。

在 你 的 类 的 成 员 函 数 的 实 现 文 件 ( .CPP ) 中 , 使 用 BEGIN_EVENTSINK_MAP 宏 开 始 事 件 映 射 , 然 后 为 每 个 要 识 别 的 事 件 加 入 一 个 入 口 , 最 后 用END_EVENTSINK_MAP 宏 结 束 事 件 接 收 映 射 。

关 于 事 件 接 收 映 射 和 OLE 控 件 容 器 的 更 多 信 息 参 见 《 V isual C++ 程 序 员 指 南 》中 的 “ ActiveX 控 件 容 器 ” 。

请 参 阅 DECLARE_EVENTSINK_MAP, END_EVENTSINK_MAP

BEGIN_MESSAGE_MAP( theClass , baseClass )

参 数

theClass

指 定 消 息 映 射 所 属 的 类 的 名 字 。

baseClass

指定 theClass 的 基 类 的 名 字 。

说 明

使 用 BEGIN_MESSAGE_MAP 宏 开 始 你 的 消 息 映 射 的 定 义 。

在 你 的 类 的 成 员 函 数 的 实 现 文 件 ( .CPP ) 中 , 使 用 BEGIN_MESSAGE_MAP 宏 开 始 消 息 映 射 , 然 后 为 每 个 消 息 处 理 函 数 加 入 一 个 入 口 , 最 后 用END_MESSAGE_MAP 宏 结 束 消 息 映 射 。

关 于 消 息 映 射 和 BEGIN_MESSAGE_MAP 的 更 多 信 息 参 见 《 V isual C++ 教 程 》中 的 “ 加 入 对 话 框 ” 。

示 例

// BEGIN_MESSAGE_MAP 示 例

BEGIN_MESSAGE_MAP( CMyWindow, CFrameWnd )

//{{AFX_MSG_MAP( CMyWindow ) ON_WM_PAINT()

ON_COMMAND( IDM_ABOUT, OnAbout )

//}}AFX_MSG_MAP END_MESSAGE_MAP( )

请 参 阅 DECLARE_MESSAGE_MAP, END_MESSAGE_MAP

BEGIN_OLEFACTORY

BEGIN_OLEFACTORY( class _ name )

参 数

class_name

指 定 了 类 工 厂 所 属 的 控 件 类 的 名 字 。

说 明

在 控 件 类 的 头 文 件 中 , 用 BEGIN_OLEFACTORY 宏 开 始 你 的 类 工 厂 的 定 义 。在 BEGIN_OLEFACTORY 后 面 必 须 立 即 开 始 类 工 厂 许 可 函 数 的 定 义 。

请 参 阅 END_OLEFACTORY, DECLARE_OLECREATE_EX

BEGIN_PARSE_MAP

BEGIN_PARSE_MAP( theClass , baseClass )

参 数

theClass

指 定 拥 有 这 个 解 析 映 射 的 类 的 名 字 。

baseClass

指定 theClass 的 基 类 的 名 字 。 必 须 是 从 CHttpServer 继 承 的 类 。

说 明

使 用 BEGIN_PARSE_MAP 宏 来 开 始 你 的 解 析 映 射 的 定 义 。

当 CHttpServer 对 象 接 收 到 一 个 客 户 命 令 时 , 解 析 映 射 就 将 此 命 令 与 其 类 成 员

函 数 和 参 数 关 联 起 来 。 对 于 每 个 CHttpServer 对 象 仅 有 一 个 解 析 映 射 。

在 你 的 类 成 员 函 数 的 实 现 文 件 ( .CPP ) 中 , 用 BEGIN_PARSE_MAP 宏 开 始 一个 解 析 映 射 , 然 后 为 你 的 每 一 个 解 析 函 数 和 属 性 加 入 一 个 入 口 , 最 后 用END_PARSE_MAP 宏 来 结 束 解 析 映 射 。

有 关 解 析 映 射 的 例 子 参 见 ON_PARSE_COMMAND 。

请 参 阅 ON_PARSE_COMMAND, ON_PARSE_COMMAND_PARAMS, DEFAULT_PARSE_COMMAND, END_PARSE_MAP, CHttpServer

BEGIN_PROPPAGEIDS

BEGIN_PROPPAGEIDS( class _ nam e, count )

参 数

class_name

指 定 了 属 性 页 的 控 件 类 的 名 字 。

count

控 件 类 使 用 的 属 性 页 的 数 目 。

说 明

使 用 BEGIN_PROPPAGEIDS 宏 来 开 始 你 的 控 件 的 属 性 页 ID 列 表 的 定 义 。

在 你 的 类 成 员 函 数 的 实 现 文 件 ( .CPP ) 中 , 用 BEGIN _ PROPPAGEIDS 宏 来 开始 属 性 页 列 表 , 然 后 为 你 的 每 一 个 属 性 页 加 入 一 个 入 口 , 最 后 用END_PROPPAGEIDS 宏 来 结 束 属 性 页 列 表 。

有 关 属 性 页 的 更 多 信 息 参 见 《 V isual C++ 程 序 员 指 南 》 中 的 文 章 : “ ActiveX 控件 : 属 性 页 ” 。

请 参 阅 END_PROPPAGEIDS, DECLARE_PROPPAGEIDS, PROPPAGEID

CATCH

CATCH( exception _ class , exception _ object _ pointer _ name )

参 数

exception_class

指 定 了 要 检 测 的 异 常 类 型 。 有 关 标 准 异 常 类 的 列 表 参 见 CException 类。

exception_object_pointer_name

指 定 了 这 个 宏 将 创 建 的 异 常 对 象 指 针 的 名 字 。 你 可 以 在 CATCH 块 内 使

用 这 个 指 针 名 来 访 问 异 常 对 象 。 这 个 变 量 是 为 你 定 义 的 。

说 明

使 用 这 个 宏 来 定 义 一 个 代 码 块 , 它 将 捕 捉 前 面 的 TRY 块 抛 出 的 第 一 个 异 常 类型 。 异 常 处 理 代 码 能 够 检 验 异 常 对 象 以 获 得 有 关 异 常 原 因 的 详 细 信 息 。 调 用THROW_LAST 宏 可 以 将 处 理 权 移 交 给 下 一 个 异 常 框 架 。 用 END_CATCH 来 结束 一 个 TRY 块 。

如 果 exception _ class 是 CException 类 , 那 么 所 有 的 异 常 类 型 都 会 被 捕 捉 。 你 可以 使 用 CObject::IsKindOf 成 员 函 数 来 决 定 抛 出 什 么 类 型 的 异 常 。 捕 捉 几 个 类 型的 异 常 的 更 好 的 方 式 是 使 用 一 系 列 的 AND_CATCH 语 句 , 每 个 针 对 一 个 不 同的 异 常 类 型 。

异 常 对 象 指 针 是 由 宏 生 成 的 。 你 不 必 自 己 声 明 它 。

注意 CATCH 块 被 定 义 为 一 个 C++ 作 用 域 ( 用 大 括 号 分 界 ) 。 如 果 你 在 这个 作 用 域 内 声 明 了 变 量 , 记 住 它 只 能 在 作 用 域 内 部 访 问 。 这 也 适 用 于exception_object_point- er_name 。

关 于 异 常 和 CATCH 宏 的 更 多 信 息 参 见 《 Visual C++ 程 序 员 指 南 》 中 的 文 章 : “ 异 常 ” 。

请 参 阅 TRY, AND_CATCH, END_CATCH, THROW, THROW_LAST,

CATCH_ALL, CException

CATCH_ALL( exception _ object _ pointer _ name )

参 数

exception _ objec t_ pointer _ name

指 定 了 这 个 宏 生 成 的 异 常 对 象 指 针 的 名 字 。 你 可 以 在 CATCH_ALL 块 中使 用 这 个 指 针 名 来 访 问 异 常 对 象 。 这 个 变 量 是 为 你 定 义 的 。

说 明

使 用 这 个 宏 来 定 义 一 块 代 码 , 它 捕 捉 前 面 的 TRY 块 中 抛 出 的 所 有 的 异 常 类 型 。异 常 处 理 代 码 能 够 检 验 异 常 对 象 以 获 得 关 于 异 常 原 因 的 详 细 信 息 。 调 用THROW_LAST 宏 可 以 将 处 理 权 移 交 给 下 一 个 异 常 框 架 。 如 果 你 使 用 了CATCH_ALL , 用 END_CATCH_ALL 宏 来 结 束 TRY 块 。

注意 CATCH_ALL 块 被 定 义 为 一 个 C++ 作 用 域 ( 用 大 括 号 分 界 ) 。 如 果 你在 此 作 用 域 内 定 义 了 一 个 变 量 , 记 住 你 只 能 在 这 个 作 用 域 内 部 访 问 它 。

有 关 异 常 的 更 多 的 信 息 参 见 《 V isual C++ 程 序 员 指 南 》 中 的 文 章 : “ 异 常 ” 。

请 参 阅 TRY, AND_CATCH_ALL, END_CATCH_ALL, THROW,

THROW_LAST, CATCH, CException

template< class TYPE , class ARG _ TYPE >

BOOL AFXAPI CompareElements( const TYPE * pElement1 ,const ARG _ TYPE * pElement2 );

返 回 值

如 果 pElement1 所 指 向 的 对 象 与 pElement2 所 指 向 的 对 象 相 等 , 则 返 回 非 零 值 。否 则 返 回 0 。

参 数

TYPE

要 比 较 的 第 一 个 元 素 的 类 型 。

pElement1

指 向 要 比 较 的 第 一 个 元 素 的 指 针 。

ARG_TYPE

要 比 较 的 第 二 个 元 素 的 类 型 。

pElement2

指 向 要 比 较 的 第 二 个 元 素 的 指 针 。

说 明

这 个 函 数 由 CList::Find 直 接 调 用 , CMap::Lookup 和 CMap::operator[] 会 间 接 调用 它 。 CMap 的 调 用 使 用 了 CMap 的 模 板 参 数 KEYARG _ KEY

缺 省 的 实 现 返 回 对 * pElement1 和 * pElement2 进 行 比 较 的 结 果 。 你 可 以 重 载 这 个函 数 以 便 它 以 一 种 适 用 于 你 的 应 用 程 序 的 方 式 进 行 比 较 。

C++ 语 言 为 简 单 类 型 ( cha r, int, float 等 等 ) 定 义 了 比 较 操 作 符 ( == ) , 但 是没 有 为 类 和 结 构 定 义 比 较 操 作 符 。 如 果 你 想 使 用 CompareElements 或 演 示 一 个使 用 它 的 集 合 类 , 你 就 要 定 义 一 个 比 较 操 作 符 或 者 重 载 CompareElements 以 返回 正 确 的 类 型 。

请 参 阅 CList, CMap

ConstructElements

template< class TYPE >

void AFXAPI ConstructElements( TYPE* pElements , int nCount );

参 数

TYPE

指 定 了 要 构 造 的 元 素 的 类 型 的 模 板 参 数 。

pElements

指 向 元 素 的 指 针 。

nCount

要 构 造 的 元 素 的 数 目 。

说 明

这 个 函 数 在 构 造 新 的 数 组 、 列 表 或 映 射 时 被 调 用 。 缺 省 的 版 本 将 新 元 素 的 所 有位 初 始 化 为 0 。

关 于 这 个 函 数 以 及 其 它 帮 助 函 数 的 信 息 参 见 《 Visual C++ 程 序 员 指 南 》 中 的 文章 “ 集 合 : 如 何 生 成 类 型 安 全 的 集 合 ” 。

请 参 阅 CArray, CList, CMap

CopyElements

template< class TYPE >

void AFXAPI CopyElements( TYPE * pDes t, const TYPE * pSrc , int nCount );

参 数

TYPE

pDest pSrc

指 定 了 要 复 制 的 元 素 类 型 的 模 板 参 数 。指 向 复 制 元 素 的 目 的 的 指 针 。

指 向 要 复 制 的 元 素 源 的 指 针 。

nCount

要 复 制 的 元 素 的 数 目 。

说 明

这 个 函 数 由 CArray::Append 和 CArray::Copy 直 接 调 用 。 缺 省 实 现 使 用 单 一 指定 的 操 作 符 ( = ) 来 执 行 复 制 操 作 。 如 果 被 复 制 的 类 型 没 有 过 载 操 作 符 = , 那 么缺 省 的 实 现 按 位 进 行 复 制 。

关 于 这 个 函 数 以 及 其 它 帮 助 函 数 的 实 现 参 见 《 Visual C++ 程 序 员 指 南 》 中 的 文章 “ 如 何 生 成 类 型 安 全 的 集 合 ” 。

请 参 阅 CArray

CONNECTION_IID( iid )

参 数

iid

连 接 点 调 用 的 接 口 的 ID 。

说 明

在 BEGIN_CONNECTION_PART 和 END_CONNECTION_PART 之 间 使 用

CONNECTION- _IID 宏 来 为 你 的 OLE 控 件 支 持 的 连 接 点 定 义 接 口 ID 。iid 参 数 是 用 于 识 别 连 接 点 对 其 连 接 的 接 收 方 调 用 的 接 口 的 ID 。 例 如 : CONNECTION_IID(IID_ISinkInterface)

指 定 了 调 用 ISinkInterface 接 口 的 连 接 点 。

请 参 阅 BEGIN_CONNECTION_PART, DECLARE_CONNECTION_MAP, END_CONNECTION_PART

CONNECTION_PART( theClass , iid , localClass )

参 数

theClass

指 定 了 连 接 点 所 属 的 控 件 类 的 名 字 。

iid

连 接 点 调 用 的 接 口 的 ID 。

localClass

指 定 了 实 现 连 接 点 的 本 地 类 的 名 字 。

说 明

使 用 CONNECTION_PART 宏 来 把 你 的 OLE 控 件 的 连 接 映 射 到 一 个 指 定 的 接口 ID 。

例 如 :

BEGIN_CONNECTION_MAP(CSampleCtrl, COleControl) CONNECTION_PART(CSampleCtrl, IID_ISinkInterface, MyConnPt) END_CONNECTION_MAP()

实 现 了 一 个 连 接 映 射 , 其 中 有 一 个 连 接 点 , 它 调 用 了 IID_ISinkInterface 接 口 。

请 参 阅 BEGIN_CONNECTION_PART, DECLARE_CONNECTION_MAP, BEGIN_CONNECTION_MAP, CONNECTION_IID

DDP_CBIndex

void AFXAPI DDP_CBIndex( CDataExchange* pDX , int id , int& membe r , LPCTSTR pszPropName );

参 数

pDX

id

指向 CDataExchange 对 象 的 指 针 。 框 架 提 供 了 这 个 对 象 , 用 于 建 立 数 据交 换 的 环 境 , 包 括 它 的 方 向 。

pszPropName 指 定 的 控 件 属 性 相 关 的 组 合 框 控 件 的 资 源 ID 。

member

id 指 定 的 属 性 页 控 件 和 pszPropName 指 定 的 属 性 相 关 的 成 员 变 量 。

pszPropName

将 要 与 id 指 定 的 组 合 框 控 件 交 换 数 据 的 控 件 属 性 的 名 字 。

说 明

在 你 的 属 性 页 的 DoDataExchange 函 数 中 调 用 这 个 函 数 以 使 整 数 属 性 的 值 与 属性 页 中 组 合 框 的 当 前 选 择 的 索 引 同 步 。 这 个 函 数 必 须 在 相 应 的 DDX_CBIndex 函 数 之 前 调 用 。

请 参 阅 DDP_CBString, DDP_Text, COleControl::DoPropExchange, DDX_CBIndex

DDP_CBString

void AFXAPI DDP_CBString( CDataExchange* pD X , int id , CString& membe r , LPCTSTR pszPropName );

参 数

pDX

指 向 CDataExchange 对 象 的 指 针 。 框 架 提 供 了 这 个 对 象 , 用 于 建 立 数 据 交 换 的环 境 , 包 括 它 的 方 向 。

id

pszPropName 指 定 的 控 件 属 性 相 关 的 组 合 框 控 件 的 资 源 ID 。

member

pszPropName

将 要 与 id 指 定 的 组 合 框 控 件 交 换 数 据 的 控 件 属 性 的 名 字 。

说 明

在 你 的 属 性 页 的 DoDataExchange 函 数 中 调 用 这 个 函 数 以 使 字 符 串 属 性 的 值 与属 性 页 中 组 合 框 的 当 前 选 择 同 步 。 这 个 函 数 必 须 在 相 应 的 DDX_CBCString 函数 之 前 调 用 。

请 参 阅 DDP_CBStringExact, DDP_CBIndex, COleControl::DoPropExchange, DDX_CBString

DDP_CBStringExact

void AFXAPI DDP_CBStringExact( CDataExchange* pDX , int id , CString&

membe r , LPCTSTR pszPropName );

参 数

pDX

指向 CDataExchange 对 象 的 指 针 。 框 架 提 供 了 这 个 对 象 , 用 于 建 立 数 据

id

pszPropName 指 定 的 控 件 属 性 相 关 的 组 合 框 控 件 的 资 源 ID 。

member

id 指 定 的 属 性 页 控 件 和 pszPropName 指 定 的 属 性 相 关 的 成 员 变 量 。

pszPropName

将 要 与 id 指 定 的 组 合 框 控 件 交 换 数 据 的 控 件 属 性 的 名 字 。

说 明

在 你 的 属 性 页 的 DoDataExchange 函 数 中 调 用 这 个 函 数 以 使 属 性 页 中 组 合 框 的当 前 选 择 和 与 之 完 全 匹 配 的 字 符 串 属 性 的 值 同 步 。 这 个 函 数 必 须 在 相 应 的DDX_CBCStringExtract 函 数 之 前 调 用 。

请 参 阅 DDP_CBString, DDP_CBIndex, COleControl::DoPropExchange, DDX_CBString Exact

DDP_Check

void AFXAPI DDP_Check(CDataExchange* pD X , int id ,int & member ,LPCSTR

pszPropName );

参 数

pDX

id

指向 CDataExchange 对 象 的 指 针 。 框 架 提 供 了 这 个 对 象 , 用 于 建 立 数 据交 换 的 环 境 , 包 括 它 的 方 向 。

与 pszPropName 指 定 的 控 件 属 性 相 关 的 复 选 框 控 件 的 资 源 ID 。

member

id 指 定 的 属 性 页 控 件 和 pszPropName 指 定 的 属 性 相 关 的 成 员 变 量 。

pszPropName

将 要 与 id 指 定 的 复 选 框 控 件 交 换 数 据 的 控 件 属 性 的 名 字 。

说 明

在 你 的 属 性 页 的 DoDataExchange 函 数 中 调 用 这 个 函 数 以 使 属 性 的 值 与 相 关 属性 页 的 复 选 框 同 步 。 这 个 函 数 必 须 在 相 应 的 DDX_Check 函 数 之 前 调 用 。

请 参 阅 DDP_Radio, DDP_Text, COleControl::DoPropExchange, DDX_Check

DDP_LBIndex

Void AFXAPI DDP_LBIndex(CDataExchange* pD X , int id , int& member , LPCTSTR

pszPropName );

参 数

pDX

id

指向 CDataExchange 对 象 的 指 针 。 框 架 提 供 了 这 个 对 象 , 用 于 建 立 数 据交 换 的 环 境 , 包 括 它 的 方 向 。

pszPropName 指 定 的 控 件 属 性 相 关 的 列 表 框 控 件 的 资 源 ID 。

member

id 指 定 的 属 性 页 控 件 和 pszPropName 指 定 的 属 性 相 关 的 成 员 变 量 。

pszPropName

将 要 与 id 指 定 的 列 表 框 字 符 串 交 换 数 据 的 控 件 属 性 的 名 字 。

说 明

在 你 的 属 性 页 的 DoDataExchange 函 数 中 调 用 这 个 函 数 以 使 整 数 属 性 的 值 与 属性 页 中 列 表 框 的 当 前 选 择 的 索 引 同 步 。 这 个 函 数 必 须 在 相 应 的 DDX_LBIndex 函 数 之 前 调 用 。

请 参 阅 DDP_LBString, DDP_CBIndex, COleControl::DoPropExchange, DDX_LBIndex

DDP_LB String

void AFXAPI DDP_LB String ( CDataExchange* pDX , int id , CString& membe r , LPCTSTR pszPropName );

参 数

pDX

id

指向 CDataExchange 对 象 的 指 针 。 框 架 提 供 了 这 个 对 象 , 用 于 建 立 数 据交 换 的 环 境 , 包 括 它 的 方 向 。

pszPropName 指 定 的 控 件 属 性 相 关 的 列 表 控 件 的 资 源 ID 。

member

id 指 定 的 属 性 页 控 件 和 pszPropName 指 定 的 属 性 相 关 的 成 员 变 量 。

pszPropName

将 要 与 id 指 定 的 列 表 框 字 符 串 交 换 数 据 的 控 件 属 性 的 名 字 。

说 明

在 你 的 属 性 页 的 DoDataExchange 函 数 中 调 用 这 个 函 数 以 使 整 数 属 性 的 值 与 属性 页 中 列 表 框 的 当 前 选 择 同 步 。 这 个 函 数 必 须 在 相 应 的 DDX_LBString 函 数 之

前 调 用 。

请 参 阅

DDP_LBString Exact,DDP_CBIndex,COleControl::DoPropExchange,DDX_LB- String

DDP_LBStringExact

void AFXAPI DDP_LBStringExact( CDataExchange* pD X , int id , CString&

membe r , LPCTSTR pszPropName );

参 数

pDX

id

指向 CDataExchange 对 象 的 指 针 。 框 架 提 供 了 这 个 对 象 , 用 于 建 立 数 据交 换 的 环 境 , 包 括 它 的 方 向 。

pszPropName 指 定 的 控 件 属 性 相 关 的 列 表 框 控 件 的 资 源 ID 。

member

id 指 定 的 属 性 页 控 件 和 pszPropName 指 定 的 属 性 相 关 的 成 员 变 量 。

pszPropName

将 要 与 id 指 定 的 列 表 框 字 符 串 交 换 数 据 的 控 件 属 性 的 名 字 。

说 明

在 你 的 属 性 页 的 DoDataExchange 函 数 中 调 用 这 个 函 数 以 使 属 性 页 中 列 表 框 的当 前 选 择 和 与 之 完 全 匹 配 的 字 符 串 属 性 的 值 同 步 。 这 个 函 数 必 须 在 相 应 的DDX_LBStringExact 函 数 之 前 调 用 。

请 参 阅 DDP_LBString, DDP_LBIndex, COleControl::DoPropExchange, DDX_LBStringExact

DDP_PostProcessing

void AFXAPI DDP_PostProcessing( CDataExchange * pDX );

参 数

pDX

指向 CDataExchange 对 象 的 指 针 。 框 架 提 供 了 这 个 对 象 以 建 立 数 据 交 换的 环 境 , 包 括 其 方 向 。

说 明

在 你 的 属 性 页 的 DoDataExchange 函 数 中 调 用 这 个 函 数 , 使 得 当 属 性 值 被 存 储

以 后 停 止 在 属 性 页 到 控 件 之 间 的 数 据 交 换 。

这 个 函 数 必 须 在 所 有 的 数 据 交 换 函 数 都 结 束 以 后 调 用 。 例 如 :

void CSamplePage::DoDataExchange(CDataExchange* pDX)

{

//{{AFX_DATA_MAP(CSpindialPropPage) DDP_Text(pDX, IDC_POSITIONEDIT, m_NeedlePosition,

_T("NeedlePosition"));

DDX_Text(pDX, IDC_POSITIONEDIT, m_NeedlePosition); DDV_MinMaxInt(pDX, m_NeedlePosition, 0, 3);

//}}AFX_DATA_MAP

DDP_PostProcessing(pDX);

}

请 参 阅 COleControl::DoPropExchange

DDP_Radio

void AFXAPI DDP_Radio( CDataExchange* pDX , int id , int & member , LPCTSTR

pszPropName );

参 数

pDX

id

指向 CDataExchange 对 象 的 指 针 。 框 架 提 供 了 这 个 对 象 , 用 于 建 立 数 据交 换 的 环 境 , 包 括 它 的 方 向 。

pszPropName 指 定 的 控 件 属 性 相 关 的 单 选 按 钮 控 件 的 资 源 ID 。

member

id 指 定 的 属 性 页 控 件 和 pszPropName 指 定 的 属 性 相 关 的 成 员 变 量 。

pszPropName

将 要 与 id 指 定 的 单 选 按 钮 控 件 交 换 数 据 的 控 件 属 性 的 名 字 。

说 明

在 你 的 属 性 页 的 DoDataExchange 函 数 中 调 用 这 个 函 数 以 使 属 性 值 与 属 性 页 中的 单 选 按 钮 控 件 同 步 。 这 个 函 数 必 须 在 相 应 的 DDX_Radio 函 数 之 前 调 用 。

请 参 阅 DDP_Check, DDP_Text, COleControl::DoPropExchange, DDX_Radio

DDP_Text

void AFXAPI DDP_Text( CDataExchange* pD X , int id , BYTE & member ,

LPCTSTR pszPropName );

void AFXAPI DDP_Text( CDataExchange* pD X , int id , int & member , LPCTSTR pszPropName );

void AFXAPI DDP_Text( CDataExchange* pD X , int id , UINT & membe r ,

LPCTSTR pszPropName );

void AFXAPI DDP_Text( CDataExchange* pD X , int id , long & member , LPCTSTR pszPropName );

void AFXAPI DDP_Text( CDataExchange* pD X , int id , DWORD & member , LPCTSTR pszPropName );

void AFXAPI DDP_Text( CDataExchange* pD X , int id , float & member , LPCTSTR pszPropName );

void AFXAPI DDP_Text( CDataExchange* pD X , int id , double & member , LPCTSTR pszPropName );

void AFXAPI DDP_Text( CDataExchange* pD X , int id , CString & member , LPCTSTR pszPropName );

参 数

pDX

指向 CDataExchange 对 象 的 指 针 。 框 架 提 供 了 这 个 对 象 , 用 于 建 立 数 据交 换 的 环 境 , 包 括 它 的 方 向 。

id

pszPropName 指 定 的 控 件 属 性 相 关 的 控 件 的 资 源 ID 。

member

id 指 定 的 属 性 页 控 件 和 pszPropName 指 定 的 属 性 相 关 的 成 员 变 量 。

pszPropName

将 要 与 id 指 定 的 控 件 交 换 数 据 的 控 件 属 性 的 名 字 。

说 明

在 你 的 属 性 页 的 DoDataExchange 函 数 中 调 用 这 个 函 数 以 使 属 性 值 与 属 性 页 控件 同 步 。 这 个 函 数 必 须 在 相 应 的 DDX_Text 函 数 之 前 调 用 。

请 参 阅 DDP_Check, DDP_Radio, COleControl::DoPropExchange, DDX_Text

DDV_MaxChars

void AFXAPI DDV_MaxChars( CDataExchange* pD X , CString const& value , int

nChars ); 参 数pDX

value

指向 CDataExchange 对 象 的 指 针 。 框 架 提 供 了 这 个 对 象 以 建 立 数 据 交 换的 环 境 , 包 括 其 方 向 。

对 对 话 框 、 表 格 视 或 控 件 视 对 象 的 成 员 变 量 的 引 用 , 将 对 其 进 行 数 据 校验。

nChars

允 许 的 最 大 字 符 数 目 。

说 明

调 用 DDV_MaxChars 以 检 验 与 value 相 关 的 控 件 的 字 符 数 是 否 超 过 nChars

关 于 DDV 的 更 多 信 息 参 见 《 Visual C++ 程 序 员 指 南 》 中 的 “ 对 话 框 数 据 交 换 和校 验 ” 和 《 V isual C++ 教 程 》 中 的 “ 加 入 对 话 框 ” 。

DDV_M inMaxByte

void AFXAPI DDV_MinMaxByte( CDataExchange* pD X , BYTE value , BYTE

m inVa l, BYTE maxVal );

参 数

pDX

value

指向 CDataExchange 对 象 的 指 针 。 框 架 提 供 了 这 个 对 象 以 建 立 数 据 交 换的 环 境 , 包 括 其 方 向 。

对 对 话 框 、 表 格 视 或 控 件 视 对 象 的 成 员 变 量 的 引 用 , 将 对 其 进 行 数 据 校验。

m inVal

允 许 的 最 小 值 ( BYTE 类 型 ) 。

maxVal

允 许 的 最 大 值 ( BYTE 类 型 ) 。

说 明

调 用 DDV_MinMaxByte 以 检 验 与 value 相 关 的 控 件 中 的 值 是 否 介 于 minVal

maxVal 之 间 。

关 于 DDV 的 更 多 信 息 参 见 《 Visual C++ 程 序 员 指 南 》 中 的 “ 对 话 框 数 据 交 换 和校 验 ” 和 《 V isual C++ 教 程 》 中 的 “ 加 入 对 话 框 ” 。

DDV_M inMaxDateTime

Void AFXAPI DDV_MinMaxDateTime ( CDataExchange* pDX , CTime& refvalue , const

Ctime* refMinRange , Const Ctime* refMaxRange );

Void AFXAPIDDV_MinMaxDateTime ( CDataExchange* pD X , ColeDateTime& refValue ,

const ColeDateTime* refMinRange , const ColeDateTime* refMaxRange );

参 数

pDX

指 向 C DataExchange 对 象 的 指 针 , 框 架 提 供 了 这 个 对 象 以 建 立 数 据 交 换的 环 境 , 包 括 其 方 向 。 你 无 需 删 除 该 对 象 。

refValue

对 与 对 话 框 、 表 格 视 图 或 控 件 视 图 对 象 的 成 品 变 量 相 关 的 CTime 或

ColeDateTime 对 象 的 引 用 。 该 对 象 包 含 了 要 被 检 验 的 数 据 。

refMinRange

允 许 的 最 小 的 日 期 /时 间 值 。

允 许 的 最 大 的 日 期 /时 间 值 。

说 明

调 用 DDV_MaxDateTime 以 检 验 与 refValue 相 关 的 日 历 控 件 ( CDateTimeCtrl ) 中 的 时 间 / 日 期 值 是 否 介 于 refMinRange 和 refMaxRange 之 间 。

关 于 DDV 的 更 多 信 息 参 见 《 Visual C++ 程 序 员 指 南 》 中 的 “ 对 话 框 数 据 交 换 和校 验 ” 和 《 V isual C++ 程 序 员 教 程 》 中 的 “ 加 入 对 话 框 ” 。

请 参 阅 DDX_DateTimeCtrl, DDV_MinMaxMonth

DDV_M inMaxDouble

void AFXAPI DDV_MinMaxDouble( CDataExchange* pD X , double const& value , double minVa l, double maxVal );

参 数

pDX

指向 CDataExchange 对 象 的 指 针 。 框 架 提 供 了 这 个 对 象 以 建 立 数 据 交 换的 环 境 , 包 括 其 方 向 。

对 对 话 框 、 表 格 视 图 或 控 件 视 图 对 象 的 成 员 变 量 的 引 用 , 将 对 其 进 行 数据 校 验 。

m inVal

允 许 的 最 小 值 ( double 类 型 ) 。

maxVal

允 许 的 最 大 值 ( double 类 型 ) 。

说 明

调 用 DDV_MinMaxDouble 以 检 验 与 value 相 关 的 控 件 中 的 值 是 否 介 于 minVal

maxVal 之 间 。

关 于 DDV 的 更 多 信 息 参 见 《 Visual C++ 程 序 员 指 南 》 中 的 “ 对 话 框 数 据 交 换 和校 验 ” 和 《 V isual C++ 教 程 》 中 的 “ 加 入 对 话 框 ” 。

DDV_M inMaxDWord

void AFXAPI DDV_MinMaxDWord( CDataExchange* pD X , DWORD const&

value , D W O R D minVa l, DWORD maxVal );

参 数

pDX

value

指向 CDataExchange 对 象 的 指 针 。 框 架 提 供 了 这 个 对 象 以 建 立 数 据 交 换的 环 境 , 包 括 其 方 向 。

对 对 话 框 、 表 格 视 图 或 控 件 视 图 对 象 的 成 员 变 量 的 引 用 , 将 对 其 进 行 数据 校 验 。

m inVal

允 许 的 最 小 值 ( DWORD 类 型 ) 。

maxVal

允 许 的 最 大 值 ( DWORD 类 型 ) 。

说 明

调 用 DDV_MinMaxDWord 以 检 验 与 value 相 关 的 控 件 中 的 值 是 否 介 于 minVal

和 maxVal 之 间 。

关 于 DDV 的 更 多 信 息 参 见 《 Visual C++ 程 序 员 指 南 》 中 的 “ 对 话 框 数 据 交 换 和校 验 ” 和 《 V isual C++ 教 程 》 中 的 “ 加 入 对 话 框 ” 。

DDV_M inMaxFloat

void AFXAPI DDV_MinMaxFloat( CDataExchange* pDX , float value , float m inVa l, float maxVal );

参 数

pDX

value

指向 CDataExchange 对 象 的 指 针 。 框 架 提 供 了 这 个 对 象 以 建 立 数 据 交 换的 环 境 , 包 括 其 方 向 。

对 对 话 框 、 表 格 视 图 或 控 件 视 图 对 象 的 成 员 变 量 的 引 用 , 将 对 其 进 行 数据 校 验 。

m inVal

允 许 的 最 小 值 ( float 类 型 ) 。

maxVal

允 许 的 最 大 值 ( float 类 型 ) 。

说 明

调 用 DDV_MinMax Int 以 检 验 与 value 相 关 的 控 件 中 的 值 是 否 介 于 minVal 和

maxVal 之 间 。

关 于 DDV 的 更 多 信 息 参 见 《 Visual C++ 程 序 员 指 南 》 中 的 “ 对 话 框 数 据 交 换 和校 验 ” 和 《 V isual C++ 教 程 》 中 的 “ 加 入 对 话 框 ” 。

DDV_M inMaxInt

void AFXAPI DDV_MinMaxInt( CDataExchange* pD X , int value , int minVa l, int

maxVal );

参 数

pDX

value

指向 CDataExchange 对 象 的 指 针 。 框 架 提 供 了 这 个 对 象 以 建 立 数 据 交 换的 环 境 , 包 括 其 方 向 。

对 对 话 框 、 表 格 视 或 控 件 视 对 象 的 成 员 变 量 的 引 用 , 将 对 其 进 行 数 据 校验。

m inVal

允 许 的 最 小 值 ( int 类 型 ) 。

maxVal

允 许 的 最 大 值 ( int 类 型 ) 。

说 明

调 用 DDV_MinMaxInt 以 检 验 与 value 相 关 的 控 件 中 的 值 是 否 介 于 minVal 和

maxVal 之 间 。

关 于 DDV 的 更 多 信 息 参 见 《 Visual C++ 程 序 员 指 南 》 中 的 “ 对 话 框 数 据 交 换 和校 验 ” 和 《 V isual C++ 教 程 》 中 的 “ 加 入 对 话 框 ” 。

DDV_M inMaxLong

void AFXAPI DDV_MinMaxLong( CDataExchange* pD X , long value , long m inVa l, long maxVal );

参 数

pDX

value

指向 CDataExchange 对 象 的 指 针 。 框 架 提 供 了 这 个 对 象 以 建 立 数 据 交 换的 环 境 , 包 括 其 方 向 。

对 对 话 框 、 表 格 视 或 控 件 视 对 象 的 成 员 变 量 的 引 用 , 将 对 其 进 行 数 据 校验。

m inVal

maxVal

允 许 的 最 大 值 ( long 类 型 ) 。

说 明

调 用 DDV_MinMaxLong 以 检 验 与 value 相 关 的 控 件 中 的 值 是 否 介 于 minVal 和

maxVal 之 间 。

关 于 DDV 的 更 多 信 息 参 见 《 Visual C++ 程 序 员 指 南 》 中 的 “ 对 话 框 数 据 交 换 和校 验 ” 和 《 V isual C++ 教 程 》 中 的 “ 加 入 对 话 框 ” 。

DDV_M inMaxMonth

void AFXAPI DDV_MinMaxMonth(CDataExchange* pDX ,CTime& refValue , const CTime* refMinRange , const CTime* refMaxRange );

void AFXAPI DDV_MinMaxMonth(CDataExchange* pD X ,COleDateTime&

refValue , const COleDateTime* refMinRange , const COleDateTime* refMaxRange );

参 数

pDX

的 环 境 , 包 括 其 方 向 。

refV alue

对 与 对 话 框 、 表 格 视 或 控 件 视 对 象 的 成 员 变 量 相 关 的 CTime 或COleDateTime 对 象 的 引 用 。 该 对 象 包 含 了 要 被 校 验 的 数 据 。 当DDV_MinMaxMonth 被 调 用 时 , MFC 把 这 个 引 用 传 递 给 它 。

refMinRange

允 许 的 最 小 的 日 期 /时 间 值 。

refMaxRange

允 许 的 最 大 的 日 期 /时 间 值 。

说 明

调 用 DDV_MinMax Month 以 检 验 与 refValue 相 关 的 日 历 控 件 ( CMonthCalCtrl ) 中 的 时 间 / 日 期 值 是 否 介 于 refMinRange 和 refMaxRange 之 间 。

关 于 DDV 的 更 多 信 息 参 见 《 Visual C++ 程 序 员 指 南 》 中 的 “ 对 话 框 数 据 交 换 和校 验 ” 和 《 V isual C++ 教 程 》 中 的 “ 加 入 对 话 框 ” 。

DDV_M inMaxSlider

void AFXAPI DDV_MinMaxSlider(CDataExchange* pD X , D W O R D value , D W O R D m inVa l, DWORD maxVa l );

参 数

pDX

value

指向 CDataExchange 对 象 的 指 针 。 框 架 提 供 了 这 个 对 象 以 建 立 数 据 交 换的 环 境 , 包 括 其 方 向 。

对 要 被 校 验 的 数 据 的 引 用 。 这 个 参 数 保 存 或 设 置 滑 块 控 件 的 当 前 位 置 。

m inVal

允 许 的 最 小 值 。

maxVal

允 许 的 最 大 值 。

说 明

调 用 DDV_MinMax Slider 以 检 验 与 value 相 关 的 控 件 中 的 值 是 否 介 于 minVal 和

maxVal 之 间 。

关 于 DDV 的 更 多 信 息 参 见 《 Visual C++ 程 序 员 指 南 》 中 的 “ 对 话 框 数 据 交 换 和校 验 ” 和 《 V isual C++ 教 程 》 中 的 “ 加 入 对 话 框 ” 。 有 关 滑 块 控 件 的 更 多 信 息参 见 《 Visual C++ 程 序 员 指 南 》 中 的 “ 使 用 CSliderCtrl” 。

请 参 阅 DDX_Slider, DDX_FieldSlider

DDV_M inMaxUnsigned

void AFXAPI DDV_MinMaxUnsigned( CDataExchange* pDX , unsigned value , unsigned m inVa l, unsigned maxVal );

参 数

pDX

value

指向 CDataExchange 对 象 的 指 针 。 框 架 提 供 了 这 个 对 象 以 建 立 数 据 交 换的 环 境 , 包 括 其 方 向 。

对 对 话 框 、 表 格 视 或 控 件 视 对 象 的 成 员 变 量 的 引 用 , 将 对 其 进 行 数 据 校验。

m inVal

允 许 的 最 小 值 ( unsigned 类 型 ) 。

maxVal

允 许 的 最 大 值 ( unsigned 类 型 ) 。

说 明

调 用 DDV_MinMaxUnsigned 以 检 验 与 value 相 关 的 控 件 中 的 值 是 否 介 于 minVal

和 maxVal 之 间 。

关 于 DDV 的 更 多 信 息 参 见 《 Visual C++ 程 序 员 指 南 》 中 的 “ 对 话 框 数 据 交 换 和校 验 ” 和 《 V isual C++ 教 程 》 中 的 “ 加 入 对 话 框 ” 。

DDX_CBIndex

void AFXAPI DDX_CBIndex( CDataExchange* pDX , int nIDC , int& index );

参 数

pDX

nIDC

指向 CDataExchange 对 象 的 指 针 。 框 架 提 供 了 这 个 对 象 以 建 立 数 据 交 换的 环 境 , 包 括 其 方 向 。

index

与 控 件 属 性 相 关 的 组 合 框 控 件 的 ID 。

对 对 话 框 、 表 格 视 或 控 件 视 的 成 员 变 量 的 引 用 , 将 与 该 变 量 发 生 数 据 交换。

说 明

DDX_CBIndex 函 数 管 理 着 在 对 话 框 、 表 格 视 或 控 件 视 中 的 组 合 框 控 件 与 对 话框 、 表 格 视 或 控 件 视 的 整 数 数 据 成 员 之 间 的 整 数 数 据 交 换 。

当 DDX_CBIndex 被 调 用 时 , index 被 设 置 为 组 合 框 的 当 前 选 择 的 索 引 。 如 果 没有 选 择 任 何 项 , 则 index 被 设 为 0 。

有 关 DDX 的 更 多 信 息 参 见 《 Visual C++ 程 序 员 指 南 》 中 的 “ 对 话 框 数 据 交 换 和校 验 ” 和 《 V isual C++ 教 程 》 中 的 “ 加 入 对 话 框 ” 。

请 参 阅 DDP_CBIndex

DDX_CBString

void AFXAPI DDX_CBString( CDataExchange* pD X , int nIDC , CString& value );

参 数

pDX

nIDC

value

指向 CDataExchange 对 象 的 指 针 。 框 架 提 供 了 这 个 对 象 以 建 立 数 据 交 换的 环 境 , 包 括 其 方 向 。

与 控 件 属 性 相 关 的 组 合 框 控 件 的 资 源 ID 。

对 对 话 框 、 表 格 视 或 控 件 视 的 成 员 变 量 的 引 用 , 将 与 该 变 量 发 生 数 据 交换。

说 明

DDX_CBString 函 数 管 理 着 在 对 话 框 、 表 格 视 或 控 件 视 中 的 组 合 框 中 的 编 辑 控件 与 对 话 框 、 表 格 视 或 控 件 视 的 CString 数 据 成 员 之 间 的 CString 数 据 交 换 。

当 DDX_CBString 被 调 用 时 , value 被 设 置 为 组 合 框 的 当 前 选 择 。 如 果 没 有 选 择任 何 项 , 则 index 被 设 为 空 字 符 串 。

注意 如 果 组 合 框 是 一 个 下 拉 列 表 框 , 交 换 的 值 被 限 制 在 255 个 字 符 以内 。

有 关 DDX 的 更 多 信 息 参 见 《 Visual C++ 程 序 员 指 南 》 中 的 “ 对 话 框 数 据 交 换 和

校 验 ” 和 《 V isual C++ 教 程 》 中 的 “ 加 入 对 话 框 ” 。

请 参 阅 DDP_CBString

DDX_CBString Exact

void AFXAPI DDX_CBString Exact ( CDataExchange* pD X , int nIDC , CString&

value );

参 数

pDX

nIDC

value

指向 CDataExchange 对 象 的 指 针 。 框 架 提 供 了 这 个 对 象 以 建 立 数 据 交 换的 环 境 , 包 括 其 方 向 。

与 控 件 属 性 相 关 的 组 合 框 控 件 的 资 源 ID 。

对 对 话 框 、 表 格 视 或 控 件 视 的 成 员 变 量 的 引 用 , 将 与 该 变 量 发 生 数 据 交换。

说 明

DDX_CBStringExact 函 数 管 理 着 在 对 话 框 、 表 格 视 或 控 件 视 中 的 组 合 框 中 的 编辑 控 件 与 对 话 框 、表 格 视 或 控 件 视 的 CString 数 据 成 员 之 间 的 CString 数 据 交 换 。

当 DDX_CBString 被 调 用 时 , value 被 设 置 为 组 合 框 的 当 前 选 择 。 如 果 没 有 选 择任 何 项 , 则 index 被 设 为 空 字 符 串 。

注意 如 果 组 合 框 是 一 个 下 拉 列 表 框 , 交 换 的 值 被 限 制 在 255 个 字 符 以内 。

有 关 DDX 的 更 多 信 息 参 见 《 Visual C++ 程 序 员 指 南 》 中 的 “ 对 话 框 数 据 交 换 和校 验 ” 和 《 V isual C++ 教 程 》 中 的 “ 加 入 对 话 框 ” 。

请 参 阅 DDP_CBString Exact

DDX_Check

void AFXAPI DDX _Check ( CDataExchange* pD X , int nIDC , in t& value );

参 数

pDX

指向 CDataExchange 对 象 的 指 针 。 框 架 提 供 了 这 个 对 象 以 建 立 数 据 交 换

nIDC

value

的 环 境 , 包 括 其 方 向 。

与 控 件 属 性 相 关 的 复 选 框 控 件 的 资 源 ID 。

对 对 话 框 、 表 格 视 或 控 件 视 的 成 员 变 量 的 引 用 , 将 与 该 变 量 发 生 数 据 交换。

说 明

DDX_Check 函 数 管 理 着 在 对 话 框 、 表 格 视 或 控 件 视 中 的 复 选 框 控 件 与 对 话 框 、表 格 视 或 控 件 视 的 整 数 数 据 成 员 之 间 的 整 数 数 据 交 换 。

当 DDX_ Check 被 调 用 时 , value 被 设 置 为 复 选 框 的 当 前 状 态 。

有 关 DDX 的 更 多 信 息 参 见 《 Visual C++ 程 序 员 指 南 》 中 的 “ 对 话 框 数 据 交 换 和校 验 ” 和 《 V isual C++ 教 程 》 中 的 “ 加 入 对 话 框 ” 。

请 参 阅 DDP_ Check

DDX_Control

void AFXAPI DDX_Control( CDataExchange* pD X , int nIDC , CWnd& rControl );

参 数

pDX

nIDC

指向 CDataExchange 对 象 的 指 针 。 框 架 提 供 了 这 个 对 象 以 建 立 数 据 交 换的 环 境 , 包 括 其 方 向 。

与 控 件 属 性 相 关 的 被 子 类 化 的 控 件 的 资 源 ID 。

rControl

对 对 话 框 、 表 格 视 或 控 件 视 的 成 员 变 量 的 引 用 , 将 与 该 变 量 发 生 数 据 交换。

说 明

DDX_Control 函 数 管 理 着 在 对 话 框 、 表 格 视 或 控 件 视 中 被 子 类 化 的 控 件 与 对 话框 、 表 格 视 或 控 件 视 的 CWnd 数 据 成 员 之 间 的 数 据 交 换 。

有 关 DDX 的 更 多 信 息 参 见 《 Visual C++ 程 序 员 指 南 》 中 的 “ 对 话 框 数 据 交 换 和校 验 ” 和 《 V isual C++ 教 程 》 中 的 “ 加 入 对 话 框 ” 。

DDX_ DateTimeCtrl

void AFXAPI DDX_ DateTimeCtrl( CDataExchange* pDX , int nID C , CTim e&

value );

void AFXAPI DDX _DateTimeCtrl( CDataExchange* pD X , int nIDC , COleDateTim e& value );

参 数

pDX

nIDC

value

指向 CDataExchange 对 象 的 指 针 。 框 架 提 供 了 这 个 对 象 以 建 立 数 据 交 换的 环 境 , 包 括 其 方 向 。 你 不 需 要 删 除 这 个 对 象 。

与 成 员 变 量 相 关 的 日 期 / 时 间 选 取 控 件 的 资 源 ID 。

对 对 话 框 、 表 格 视 或 控 件 视 的 CTime 或 COleDateTime 成 员 变 量 的 引 用 , 将 与 该 变 量 发 生 数 据 交 换 。

说 明

DDX_DateTimeCtrl 函 数 管 理 着 在 对 话 框 、 表 格 视 或 控 件 视 中 的 日 期 / 时 间 选 取控 件 ( CDateTimeCtr l) 与 对 话 框 、 表 格 视 或 控 件 视 的 CTime 或 COleDateTime 数 据 成 员 之 间 的 日 期 和 ( 或 ) 时 间 数 据 交 换 。

当 DDX_DateTimeCtrl 被 调 用 时 , value 被 设 置 为 日 期 / 时 间 选 取 控 件 的 当 前 状态 , 或 者 控 件 的 状 态 被 设 为 value, 这 取 决 于 数 据 交 换 的 方 向 。

有 关 DDX 的 更 多 信 息 参 见 《 Visual C++ 程 序 员 指 南 》 中 的 “ 对 话 框 数 据 交 换 和校 验 ” 和 《 V isual C++ 教 程 》 中 的 “ 加 入 对 话 框 ” 。

请 参 阅 CDateTimeCtrl, CDateTimeCtrl::SetRange, CDateTimeCtrl::GetRange, DDV_MinMaxDateTime

DDX_FieldCBIndex

void AFXAPI DDX_FieldCBIndex( CDataExchange* pDX , int nIDC , int& index , CRecordset* pRecordset );

void AFXAPI DDX_FieldCBIndex( CDataExchange* pDX , int nIDC , int& index , CdaoRecord - set* pRecordset );

参 数

pDX

nIDC

index

指向 CDataExchange 对 象 的 指 针 。 框 架 提 供 了 这 个 对 象 以 建 立 数 据 交 换的 环 境 , 包 括 其 方 向 。

CRecordView 或 CDaoRecordView 对 象 中 控 件 的 ID 。

对 相 关 的 CRecordset 或 CDaoRecordset 对 象 的 字 段 数 据 成 员 的 引 用 。

pRecordset

指向 CRecordset 或 CDaoRecordset 对 象 的 指 针 , 将 与 其 发 生 数 据 交 换 。

说 明

DDX_FieldCBIndex 函 数 使 记 录 视 中 组 合 框 控 件 中 的 列 表 框 的 当 前 选 择 项 与 记录 视 的 相 关 记 录 集 对 象 的 整 数 数 据 成 员 同 步 。 当 数 据 是 从 记 录 集 传 送 到 控 件时 , 这 个 函 数 将 根 据 index 指 定 的 值 设 置 控 件 的 当 前 选 择 项 。 对 于 从 记 录 集 到控 件 的 数 据 传 送 , 如 果 记 录 集 的 字 段 为 NULL , MFC 将 index 的 值 设 为 0 。 对于 从 控 件 到 记 录 集 的 数 据 传 送 , 如 果 控 件 为 空 或 没 有 选 择 任 何 项 , 则 记 录 集 的字 段 被 设 为 0 。

如 果 你 正 在 使 用 基 于 ODBC 的 类 ,则 使 用 第 一 个 版 本 。如 果 你 正 在 使 用 基 于 DAO

的 类 , 则 使 用 第 二 个 版 本 。

有 关 DDX 的 更 多 信 息 参 见 《 Visual C++ 程 序 员 指 南 》 中 的 “ 对 话 框 数 据 交 换 和校 验 ” 和 《 Visual C++ 教 程 》 中 的 “ 加 入 对 话 框 ” 。 有 关 CRecordView 和CDaoRecordView 中 的 D D X 的 更 多 信 息 以 及 例 子 参 见 《 Visual C++ 指 南 》 中 的文 章 “ 记 录 视 ” 。

示 例

参 看 DDX_FieldText 以 获 得 一 般 的 DDX_Field 例 子 。 DDX_FieldCBIndex 的 例子 与 此 类 似 。

请 参 阅 DDX_FieldText, DDX_FieldRadio, DDX_FieldLBString, DDX_FieldLBStringExact, DDX_FieldCBStringExact, DDX_FieldLBIndex, DDX_FieldScroll, DDX_CBIndex

DDX_FieldCBString

void AFXAPI DDX_FieldCBString(

CDataExchange*

pD X ,

int

nID C ,

CString&

value , CRecordset* pRecordset );

void AFXAPI DDX_FieldCBString(

value , CDaoRecordset* pRecordset );

CDataExchange*

pD X ,

int

nID C ,

CString&

参 数

pDX

nIDC

index

指向 CDataExchange 对 象 的 指 针 。 框 架 提 供 了 这 个 对 象 以 建 立 数 据 交 换的 环 境 , 包 括 其 方 向 。

CRecordView 或 CDaoRecordView 对 象 中 控 件 的 ID 。

对 相 关 的 CRecordset 或 CDaoRecordset 对 象 的 字 段 数 据 成 员 的 引 用 。

pRecordset

指向 CRecordset 或 CDaoRecordset 对 象 的 指 针 , 将 与 其 发 生 数 据 交 换 。

说 明

DDX_FieldCBString 函 数 管 理 着 记 录 视 中 组 合 框 控 件 的 编 辑 框 与 记 录 视 的 相 关记 录 集 的 CString 数 据 成 员 之 间 的 CString 数 据 交 换 。 当 数 据 是 从 记 录 集 传 送 到控 件 时 , 这 个 函 数 将 组 合 框 控 件 的 当 前 选 择 设 为 以 value 指 定 的 字 符 串 中 字 符开 始 的 第 一 项 。 对 于 从 记 录 集 到 控 件 的 数 据 传 送 , 如 果 记 录 集 的 字 段 为 NULL , 组 合 框 的 选 择 将 被 清 除 , 其 编 辑 框 被 设 为 空 。 对 于 从 控 件 到 记 录 集 的 数 据 传 送 , 如 果 控 件 为 空 , 则 在 允 许 的 情 况 下 , 记 录 集 的 字 段 被 设 为 NULL 。

如 果 你 正 在 使 用 基 于 ODBC 的 类 ,则 使 用 第 一 个 版 本 。如 果 你 正 在 使 用 基 于 DAO

的 类 , 则 使 用 第 二 个 版 本 。

有 关 DDX 的 更 多 信 息 参 见 《 Visual C++ 程 序 员 指 南 》 中 的 “ 对 话 框 数 据 交 换 和校 验 ” 和 《 Visual C++ 教 程 》 中 的 “ 加 入 对 话 框 ” 。 有 关 CRecordView 和CDaoRecordView 中 的 D D X 的 更 多 信 息 以 及 例 子 参 见 《 Visual C++ 指 南 》 中 的文 章 “ 记 录 视 ” 。

示 例

参 看 DDX_FieldText 以 获 得 一 般 的 DDX_Field 例 子 。 这 个 例 子 中 包 含 了 对

DDX_FieldCB - String 的 调 用 。

请 参 阅 DDX_FieldText, DDX_FieldRadio, DDX_FieldLBString, DDX_FieldLBStringExact, DDX_FieldCBStringExact

DDX_FieldCBStringExact

void AFXAPI DDX_FieldCBStringExact( CDataExchange* pDX , int nIDC ,

CString& value ,

CRecordset* pRecordset );

void AFXAPI

DDX_FieldCBStringExact(

CDataExchange*

pDX ,

int

nIDC ,

CString& value , CDaoRecordset* pRecordset );

参 数

pDX

nIDC

index

指向 CDataExchange 对 象 的 指 针 。 框 架 提 供 了 这 个 对 象 以 建 立 数 据 交 换的 环 境 , 包 括 其 方 向 。

CRecordView 或 CDaoRecordView 对 象 中 控 件 的 ID 。

对 相 关 的 CRecordset 或 CDaoRecordset 对 象 的 字 段 数 据 成 员 的 引 用 。

pRecordset

指向 CRecordset 或 CDaoRecordset 对 象 的 指 针 , 将 与 其 发 生 数 据 交 换 。

说 明

DDX_FieldCBStringExact 函 数 管 理 着 记 录 视 中 组 合 框 控 件 的 编 辑 框 与 记 录 视 的相 关 记 录 集 的 CString 数 据 成 员 之 间 的 CString 数 据 交 换 。 当 数 据 是 从 记 录 集 传送 到 控 件 时 , 这 个 函 数 将 组 合 框 控 件 的 当 前 选 择 设 为 第 一 个 与 value 指 定 的 字符 串 严 格 匹 配 的 项 。 对 于 从 记 录 集 到 控 件 的 数 据 传 送 , 如 果 记 录 集 的 字 段 为NULL , 组 合 框 的 选 择 将 被 清 除 , 其 编 辑 框 被 设 为 空 。 对 于 从 控 件 到 记 录 集 的数 据 传 送 , 如 果 控 件 为 空 , 记 录 集 的 字 段 被 设 为 NULL 。

如 果 你 正 在 使 用 基 于 ODBC 的 类 ,则 使 用 第 一 个 版 本 。如 果 你 正 在 使 用 基 于 DAO

的 类 , 则 使 用 第 二 个 版 本 。

有 关 DDX 的 更 多 信 息 参 见 《 Visual C++ 程 序 员 指 南 》 中 的 “ 对 话 框 数 据 交 换 和校 验 ” 和 《 Visual C++ 教 程 》 中 的 “ 加 入 对 话 框 ” 。 有 关 CRecordView 和CDaoRecordView 中 的 D D X 的 更 多 信 息 以 及 例 子 参 见 《 V isual C++ 指 南 》 中 的文 章 “ 记 录 视 ” 。

示 例

参 看 DDX_FieldText 以 获 得 一 般 的 DDX_Field 例 子 。 对

DDX_FieldCBStringExact 的 调 用 是 类 似 的 。

请 参 阅 DDX_FieldText, DDX_FieldRadio, DDX_FieldLBString, DDX_FieldLBStringExact, DDX_FieldCBString

DDX_FieldCheck

void AFXAPI DDX_FieldCheck( CDataExchange* pD X , int nIDC , int& value , CRecordset* pRecordset );

void AFXAPI DDX_FieldCheck( CDataExchange* pD X , int nIDC , int& value , CDaoRecordset* pRecordset );

参 数

pDX

nIDC

value

指向 CDataExchange 对 象 的 指 针 。 框 架 提 供 了 这 个 对 象 以 建 立 数 据 交 换的 环 境 , 包 括 其 方 向 。

CRecordView 或 CDaoRecordView 对 象 中 控 件 的 ID 。

对 相 关 的 CRecordset 或 CDaoRecordset 对 象 的 字 段 数 据 成 员 的 引 用 。

pRecordset

指向 CRecordset 或 CDaoRecordset 对 象 的 指 针 , 将 与 其 发 生 数 据 交 换 。

说 明

DDX_FieldCheck 函 数 管 理 着 对 话 框 、 表 格 视 或 控 件 视 中 复 选 框 控 件 与 对 话 框 、表 格 视 或 控 件 视 的 int 数 据 成 员 之 间 的 整 数 数 据 交 换 。

当 DDX_FieldCheck 被 调 用 时 , value 被 设 置 为 复 选 框 控 件 的 当 前 状 态 , 也 可 能控 件 的 状 态 被 设 为 value, 这 取 决 于 数 据 传 送 的 方 向 。

有 关 DDX 的 更 多 信 息 参 见 《 Visual C++ 程 序 员 指 南 》 中 的 “ 对 话 框 数 据 交 换 和校 验 ” 和 《 V isual C++ 教 程 》 中 的 “ 加 入 对 话 框 ” 。

请 参 阅 DDX_FieldText, DDX_FieldRadio, DDX_FieldLBString, DDX_FieldLBStringExact, DDX_FieldCBString

DDX_FieldLBIndex

void AFXAPI DDX_FieldLBIndex(

CDataExchange*

pD X , int nIDC , int& index ,

CRecordset* pRecordset );

void AFXAPI DDX_FieldLBIndex( CdaoRecord - set* pRecordset );

CDataExchange*

pD X , int nIDC , int& index ,

参 数

pDX

nIDC

index

指向 CDataExchange 对 象 的 指 针 。 框 架 提 供 了 这 个 对 象 以 建 立 数 据 交 换的 环 境 , 包 括 其 方 向 。

CRecordView 或 CDaoRecordView 对 象 中 控 件 的 ID 。

对 相 关 的 CRecordset 或 CDaoRecordset 对 象 的 字 段 数 据 成 员 的 引 用 。

pRecordset

指向 CRecordset 或 CDaoRecordset 对 象 的 指 针 , 将 与 其 发 生 数 据 交 换 。

说 明

DDX_FieldLBIndex 函 数 使 记 录 视 中 列 表 控 件 的 当 前 选 择 与 记 录 视 的 相 关 记 录集 的 int 数 据 成 员 保 持 同 步 。 当 数 据 是 从 记 录 集 传 送 到 控 件 时 , 这 个 函 数 将 根据 index 的 值 设 置 控 件 的 当 前 选 择 项 。 对 于 从 记 录 集 到 控 件 的 数 据 传 送 , 如 果记 录 集 的 字 段 为 NULL , MFC 将把 index 的 值 设 为 0 。 对 于 从 控 件 到 记 录 集 的数 据 传 送 , 如 果 控 件 为 空 , 记 录 集 的 字 段 被 设 为 0 。

如 果 你 正 在 使 用 基 于 ODBC 的 类 ,则 使 用 第 一 个 版 本 。如 果 你 正 在 使 用 基 于 DAO

的 类 , 则 使 用 第 二 个 版 本 。

有 关 DDX 的 更 多 信 息 参 见 《 Visual C++ 程 序 员 指 南 》 中 的 “ 对 话 框 数 据 交 换 和校 验 ” 和 《 Visual C++ 教 程 》 中 的 “ 加 入 对 话 框 ” 。 有 关 CRecordView 和

CDaoRecordView 中 的 D D X 的 更 多 信 息 以 及 例 子 参 见 《 Visual C++ 指 南 》 中 的“ 记 录 视 ” 。

示 例

参 看 DDX_FieldText 以 获 得 一 般 的 DDX_Field 例 子 。

请 参 阅 DDX_FieldText, DDX_FieldRadio, DDX_FieldLBString, DDX_FieldLBStringExact, DDX_FieldCBStringExact, DDX_FieldCBIndex, DDX_FieldScroll, DDX_LBIndex

DDX_FieldLBString

void AFXAPI DDX_FieldLBString(

CDataExchange*

pD X ,

int nID C , CString&

value , CRecordset* pRecordset );

void AFXAPI DDX_FieldLBString(

CDataExchange*

pD X ,

int nID C , CString&

value , CDaoRecordset* pRecordset );

参 数

pDX

指向 CDataExchange 对 象 的 指 针 。 框 架 提 供 了 这 个 对 象 以 建 立 数 据 交 换

nIDC

value

的 环 境 , 包 括 其 方 向 。

CRecordView 或 CDaoRecordView 对 象 中 控 件 的 ID 。

对 相 关 的 CRecordset 或 CDaoRecordset 对 象 的 字 段 数 据 成 员 的 引 用 。

pRecordset

指向 CRecordset 或 CDaoRecordset 对 象 的 指 针 , 将 与 其 发 生 数 据 交 换 。

说 明

DDX_FieldLBString 函 数 将 记 录 视 中 列 表 框 的 当 前 选 择 复 制 给 记 录 视 的 相 关 记录 集 的 CString 数 据 成 员 。 在 相 反 的 方 向 , 这 个 函 数 将 列 表 框 控 件 的 当 前 选 择设 为 第 一 个 以 value 指 定 的 字 符 串 中 字 符 为 开 头 的 项 。 对 于 从 记 录 集 到 控 件 的数 据 传 送 , 如 果 记 录 集 的 字 段 为 NULL , 列 表 框 的 选 择 将 被 清 除 。 对 于 从 控 件到 记 录 集 的 数 据 传 送 , 如 果 控 件 为 空 , 记 录 集 的 字 段 被 设 为 NULL 。

如 果 你 正 在 使 用 基 于 ODBC 的 类 ,则 使 用 第 一 个 版 本 。如 果 你 正 在 使 用 基 于 DAO

的 类 , 则 使 用 第 二 个 版 本 。

有 关 DDX 的 更 多 信 息 参 见 《 Visual C++ 程 序 员 指 南 》 中 的 “ 对 话 框 数 据 交 换 和校 验 ” 和 《 Visual C++ 教 程 》 中 的 “ 加 入 对 话 框 ” 。 有 关 CRecordView 和

CDaoRecordView 中 的 D D X 的 更 多 信 息 以 及 例 子 参 见 《 Visual C++ 指 南 》 中 的文 章 “ 记 录 视 ” 。

示 例

参 看 DDX_FieldText 以 获 得 一 般 的 DDX_Field 例 子 。 对 DDX_FieldLBString

的 调 用 是 类 似 的 。

请参阅 DDX_FieldText, DDX_FieldRadio, DDX_FieldLBStringExact, DDX_FieldCBString, DDX_FieldCBStringExact, DDX_FieldCBIndex, DDX_FieldLBIndex, DDX_FieldScroll

DDX_FieldLBStringExact

void AFXAPI DDX_FieldLBStringExact( CDataExchange* pD X , int nIDC , CString& value , CRecordset* pRecordset );

void AFXAPI DDX_FieldLBStringExact( CDataExchange* pD X , int nIDC , CString& value , CDaoRecordset* pRecordset );

参 数

pDX

nIDC

value

指向 CDataExchange 对 象 的 指 针 。 框 架 提 供 了 这 个 对 象 以 建 立 数 据 交 换的 环 境 , 包 括 其 方 向 。

CRecordView 或 CDaoRecordView 对 象 中 控 件 的 ID 。

对 相 关 的 CRecordset 或 CDaoRecordset 对 象 的 字 段 数 据 成 员 的 引 用 。

pRecordset

指向 CRecordset 或 CDaoRecordset 对 象 的 指 针 , 将 与 其 发 生 数 据 交 换 。

说 明

DDX_FieldLBString Exact 函 数 将 记 录 视 中 列 表 框 的 当 前 选 择 复 制 给 记 录 视 的 相关 记 录 集 的 CString 数 据 成 员 。 在 相 反 的 方 向 , 这 个 函 数 将 列 表 框 控 件 的 当 前选 择 设 为 第 一 个 与 value 指 定 的 字 符 严 格 匹 配 的 项 。 对 于 从 记 录 集 到 控 件 的 数据 传 送 , 如 果 记 录 集 的 字 段 为 NULL , 列 表 框 的 选 择 将 被 清 除 。 对 于 从 控 件 到记 录 集 的 数 据 传 送 , 如 果 控 件 为 空 , 记 录 集 的 字 段 被 设 为 NULL 。

如 果 你 正 在 使 用 基 于 ODBC 的 类 ,则 使 用 第 一 个 版 本 。如 果 你 正 在 使 用 基 于 DAO

的 类 , 则 使 用 第 二 个 版 本 。

有 关 DDX 的 更 多 信 息 参 见 《 Visual C++ 程 序 员 指 南 》 中 的 “ 对 话 框 数 据 交 换 和校 验 ” 和 《 Visual C++ 教 程 》 中 的 “ 加 入 对 话 框 ” 。 有 关 CRecordView 和

CDaoRecordView 中 的 D D X 的 更 多 信 息 以 及 例 子 参 见 《 Visual C++ 指 南 》 中 的文 章 “ 记 录 视 ” 。

示 例

参 看 DDX_FieldText 以 获 得 一 般 的 DDX_Field 例 子 。 对

DDX_FieldLBStringExact 的 调 用 是 类 似 的 。

请 参 阅 DDX_FieldText, DDX_FieldRadio, DDX_FieldLBString, DDX_FieldCBString, DDX -_FieldCBStringExact, DDX_FieldCBIndex, DDX_FieldLBIndex, DDX_FieldScroll

DDX_Field Slider

void AFXAPI DDX_Field Slider( CDataExchange* pDX , int nID C , in t& value , CRecordset* pRecordset );

void AFXAPI DDX_Field Slider( CDataExchange* pDX , int nID C , in t& value , CDaoRecordset* pRecordset );

参 数

pDX

nIDC

value

指向 CDataExchange 对 象 的 指 针 。 框 架 提 供 了 这 个 对 象 以 建 立 数 据 交 换的 环 境 , 包 括 其 方 向 。

滑 块 控 件 的 资 源 ID 。

对 要 交 换 的 值 的 引 用 。 这 个 参 数 保 存 滑 块 控 件 的 当 前 位 置 , 或 者 被 用 于设 置 滑 块 控 件 的 当 前 位 置 。

pRecordset

指向 CRecordset 或 CDaoRecordset 对 象 的 指 针 , 将 与 其 发 生 数 据 交 换 。

说 明

DDX_FieldSlider 函 数 使 记 录 视 中 滑 块 控 件 的 位 置 与 记 录 视 的 相 关 记 录 集 中 的int 数 据 成 员 ( 或 者 是 你 选 择 的 任 何 整 数 变 量 ) 保 持 同 步 。 当 数 据 是 从 记 录 集 传送 到 滑 块 控 件 时 , 这 个 函 数 将 滑 块 控 件 的 位 置 设 为 value 指 定 的 值 。 对 于 从 记录 集 到 控 件 的 数 据 传 送 , 如 果 记 录 集 的 字 段 为 NULL , 滑 块 控 件 的 位 置 被 设 为0 。 对 于 从 控 件 到 记 录 集 的 数 据 传 送 , 如 果 控 件 为 空 , 记 录 集 的 字 段 被 设 为 0 。

DDX_FieldSlider 并 不 与 滑 块 控 件 交 换 范 围 信 息 , 否 则 就 可 以 设 置 范 围 而 不 仅 是位 置 。

如 果 你 正 在 使 用 基 于 ODBC 的 类 ,则 使 用 第 一 个 版 本 。如 果 你 正 在 使 用 基 于 DAO

的 类 , 则 使 用 第 二 个 版 本 。

有 关 DDX 的 更 多 信 息 参 见 《 Visual C++ 程 序 员 指 南 》 中 的 “ 对 话 框 数 据 交 换 和校 验 ” 和 《 Visual C++ 教 程 》 中 的 “ 加 入 对 话 框 ” 。 有 关 CRecordView 和CDaoRecordView 中 的 D D X 的 更 多 信 息 以 及 例 子 参 见 《 Visual C++ 指 南 》 中 的“ 记 录 视 ” 。 关 于 滑 块 控 件 的 信 息 参 见 《 V isual C++ 程 序 员 指 南 》 中 的 “ 使 用CSliderCtrl” 。

示 例

参 看 DDX_FieldText 以 获 得 一 般 的 DDX_Field 例 子 。 对 DDX_FieldSlider 的 调用 是 类 似 的 。

请 参 阅 DDX_Slider, DD V _ M in M axSlider, DDX_FieldLBString, DDX_FieldLBString Exact, DDX_FieldCBString, DDX_Field C BString Exact, DDX_FieldCBIndex, DDX_Field - LBIndex

DDX_FieldRadio

void AFXAPI DDX_FieldRadio( CDataExchange* pDX , int nID C , int& value , CRecordset* pRecordset );

void AFXAPI DDX_FieldRadio( CDataExchange* pDX , int nID C , int& value ,

参 数

pDX

nIDC

value

指向 CDataExchange 对 象 的 指 针 。 框 架 提 供 了 这 个 对 象 以 建 立 数 据 交 换的 环 境 , 包 括 其 方 向 。

在 CRecordView 或 CDaoRecordView 对 象 中 一 组 相 邻 的 单 选 按 钮 ( 具 有

WS_GROUP 风 格 ) 中 的 第 一 个 的 ID 。

对 相 关 的 CRecordset 或 CDaoRecordset 对 象 的 字 段 数 据 成 员 的 引 用 。

pRecordset

指向 CRecordset 或 CDaoRecordset 对 象 的 指 针 , 将 与 其 发 生 数 据 交 换 。

说 明

DDX_FieldRadio 函 数 把 记 录 视 的 记 录 集 中 从 零 开 始 的 int 型 成 员 变 量 与 记 录 视中 一 组 单 选 按 钮 的 当 前 选 择 项 关 联 起 来 。 当 数 据 是 从 记 录 集 字 段 传 送 到 记 录 视时 , 这 个 函 数 打 开 第 n 个 ( 从 零 开 始 ) 单 选 按 钮 并 关 闭 其 它 的 单 选 按 钮 。 按 相反 的 方 向 , 这 个 函 数 将 记 录 集 的 字 段 设 为 当 前 打 开 ( 被 选 中 ) 的 单 选 按 钮 的 序

按 钮 被 选 中 。 对 于 从 控 件 到 记 录 集 的 数 据 传 送 , 如 果 没 有 控 件 被 选 中 , 如 果 允许 , 则 记 录 集 的 字 段 被 设 为 NULL 。

如 果 你 正 在 使 用 基 于 ODBC 的 类 ,则 使 用 第 一 个 版 本 。如 果 你 正 在 使 用 基 于 DAO

的 类 , 则 使 用 第 二 个 版 本 。

有 关 DDX 的 更 多 信 息 参 见 《 Visual C++ 程 序 员 指 南 》 中 的 “ 对 话 框 数 据 交 换 和校 验 ” 和 《 Visual C++ 教 程 》 中 的 “ 加 入 对 话 框 ” 。 有 关 CRecordView 和CDaoRecordView 中 的 D D X 的 更 多 信 息 以 及 例 子 参 见 《 Visual C++ 指 南 》 中 的文 章 “ 记 录 视 ” 。

示 例

参 看 DDX_FieldText 以 获 得 一 般 的 DDX_Field 例 子 。 对 DDX_FieldRadio 的 调用 是 类 似 的 。

请 参 阅 DDX_FieldText, DDX_FieldLBString, DDX_FieldLBStringExact, DDX_FieldCB - String, DDX_FieldCBStringExact, DDX_FieldCBIndex, DDX_FieldLBIndex, DDX_FieldScroll

DDX_FieldScroll

void AFXAPI DDX_FieldScroll( CDataExchange* pDX , int nID C , int& value ,

void AFXAPI DDX_FieldScroll( CDataExchange* pDX , int nID C , int& value , CDaoRecordset* pRecordset );

参 数

pDX

nIDC

value

指向 CDataExchange 对 象 的 指 针 。 框 架 提 供 了 这 个 对 象 以 建 立 数 据 交 换的 环 境 , 包 括 其 方 向 。

在 CRecordView 或 CDaoRecordView 对 象 中 一 组 相 邻 的 单 选 按 钮 ( 具 有

WS_GROUP 风 格 ) 中 的 第 一 个 的 ID 。

对 相 关 的 CRecordset 或 CDaoRecordset 对 象 的 字 段 数 据 成 员 的 引 用 。

pRecordset

指向 CRecordset 或 CDaoRecordset 对 象 的 指 针 , 将 与 其 发 生 数 据 交 换 。

说 明

DDX_FieldScroll 函 数 使 记 录 视 中 滚 动 条 控 件 的 位 置 与 记 录 视 的 相 关 记 录 集 中 的

int 数 据 成 员 ( 或 者 是 你 选 择 的 任 何 整 数 变 量 ) 保 持 同 步 。 当 数 据 是 从 记 录 集 传

记 录 集 到 控 件 的 数 据 传 送 , 如 果 记 录 集 的 字 段 为 NULL , 滚 动 条 控 件 的 位 置 被设 为 0 。 对 于 从 控 件 到 记 录 集 的 数 据 传 送 , 如 果 控 件 为 空 , 记 录 集 的 字 段 被 设为 0 。

如 果 你 正 在 使 用 基 于 ODBC 的 类 ,则 使 用 第 一 个 版 本 。如 果 你 正 在 使 用 基 于 DAO

的 类 , 则 使 用 第 二 个 版 本 。

有 关 DDX 的 更 多 信 息 参 见 《 Visual C++ 程 序 员 指 南 》 中 的 “ 对 话 框 数 据 交 换 和校 验 ” 和 《 Visual C++ 教 程 》 中 的 “ 加 入 对 话 框 ” 。 有 关 CRecordView 和CDaoRecordView 中 的 D D X 的 更 多 信 息 以 及 例 子 参 见 《 Visual C++ 指 南 》 中 的“ 记 录 视 ” 。

示 例

参 看 DDX_FieldText 以 获 得 一 般 的 DDX_Field 例 子 。 对 DDX_FieldScroll 的 调用 是 类 似 的 。

请 参 阅 DDX_FieldText, DDX_FieldLBString, DDX_FieldLBStringExact, DDX_Field - CBString, DDX_FieldCBStringExact, DDX_FieldCBIndex, DDX_FieldLBIndex, DDX_Scroll

DDX_FieldText

void AFXAPI DDX_FieldText( CDataExchange* pD X , int nIDC , BYTE& value , CRecordset* pRecordset );

void AFXAPI DDX_FieldText( CDataExchange* pD X , int nID C , int&

value , CRecordset* pRecordset );

void AFXAPI DDX_FieldText( CDataExchange* pD X , int nIDC , UINT& value , CRecordset* pRecordset );

void AFXAPI DDX_FieldText( CDataExchange* pDX , int nIDC , long& value , CRecordset* pRecordset );

void AFXAPI DDX_FieldText( CDataExchange* pDX , int nIDC , D W O R D & value , CRecordset* pRecordset );

void AFXAPI DDX_FieldText( CDataExchange* pDX , int nID C , CString& value , CRecordset* pRecordset );

void AFXAPI DDX_FieldText( CDataExchange* pDX , int nIDC , float& value ,

CRecordset* pRecordset );

void AFXAPI DDX_FieldText( CDataExchange* pD X , int nIDC , double& value , CRecordset* pRecordset );

void AFXAPI DDX_FieldText( CDataExchange* pD X , int nIDC , short& value ,

CDaoRecordset* pRecordset );

void AFXAPI DDX_FieldText( CDataExchange* pD X , int nIDC , BOOL& value ,

CDaoRecordset* pRecordset );

void AFXAPI DDX_FieldText( CDataExchange* pD X , int nIDC , BYTE& value , CDaoRecordset* pRecordset );

void AFXAPI DDX_FieldText( CDataExchange* pDX , int nIDC , long& value ,

CDaoRecordset* pRecordset );

void AFXAPI DDX_FieldText( CDataExchange* pDX , int nIDC , D W O R D & value , CDaoRecordset* pRecordset );

void AFXAPI DDX_FieldText( CDataExchange* pDX , int nID C , CString& value , CDaoRecordset* pRecordset );

void AFXAPI DDX_FieldText( CDataExchange* pDX , int nIDC , float& value , CDaoRecordset* pRecordset );

void AFXAPI DDX_FieldText( CDataExchange* pD X , int nIDC , double& value , CDaoRecordset* pRecordset );

void AFXAPI DDX_FieldText( CDataExchange* pD X , int nIDC , COleDateTime&

value , CDaoRecordset* pRecordset );

void AFXAPI DDX_FieldText( CDataExchange* pD X , int nIDC , COleCurrency&

value , CDaoRecordset* pRecordset );

参 数

pDX

指向 CDataExchange 对 象 的 指 针 。 框 架 提 供 了 这 个 对 象 以 建 立 数 据 交 换

的 环 境 , 包 括 其 方 向 。

nIDC

value

在 CRecordView 或 CDaoRecordView 对 象 中 控 件 的 ID 。

对 相 关 的 CRecordset 或 CDaoRecordset 对 象 的 字 段 数 据 成 员 的 引 用 。value

的 数 据 类 型 与 你 使 用 的 DDX_FieldText 的 版 本 有 关 。

pRecordset

指向 CRecordset 或 CDaoRecordset 对 象 的 指 针 , 将 与 其 发 生 数 据 交 换 。这 个 指 针 使 DDX_FieldText 能 够 检 测 并 设 置 NULL 值 。

说 明

DDX_FieldText 函 数 管 理 着 编 辑 框 控 件 与 记 录 集 的 字 段 数 据 成 员 之 间 的 int, short, long, DWORD , CString , float, double , BOOL 或 BYTE 类 型 的 数 据 交换 。 对 于 CDaoRecordset 对 象 , DDX_FieldText 函 数 还 管 理 着 COleDateTime 和COleCurrency 数 值 的 传 送 。 一 个 空 的 编 辑 控 件 代 表 了 一 个 NULL 值 。 对 于 从 记录 集 到 控 件 的 数 据 传 送 , 如 果 记 录 集 的 与 为 NULL , 则 编 辑 框 被 设 为 空 。 对 于从 控 件 到 记 录 集 的 数 据 传 送 , 如 果 控 件 为 空 , 则 记 录 集 的 字 段 被 设 为 NULL 。

如 果 你 正 在 使 用 基 于 ODBC 的 类 , 则 使 用 带 CRecordset 参 数 的 版 本 。 如 果 你

正 在 使 用 基 于 D A O 的 类 , 则 使 用 带 CDaoRecordset 参 数 的 类 。

有 关 DDX 的 更 多 信 息 参 见 《 Visual C++ 程 序 员 指 南 》 中 的 “ 对 话 框 数 据 交 换 和校 验 ” 和 《 Visual C++ 教 程 》 中 的 “ 加 入 对 话 框 ” 。 有 关 CRecordView 和CDaoRecordView 中 的 D D X 的 更 多 信 息 以 及 例 子 参 见 《 Visual C++ 指 南 》 中 的文 章 “ 记 录 视 ” 。

示 例

下 面 针 对 CRecordView 的 包 含 了 DDX_FieldText 函 数 DoDataExchange 是 为 三种 类 型 调 用 的 : IDC_COURSELIST 是 一 个 组 合 框 , 其 它 两 种 控 件 是 编 辑 框 。对 于 DAO 编 程 , m_pSet 参 数 是 一 个 指 向 CRecordset 或 CDaoRecordset 的 指 针 。

//DDX_FieldText 的 例 子

void CSectionForm::DoDataExchange( CDataExchange* pDX )

{

CRecordView::DoDataExchange( pDX );

//{{AFX_DATA_MAP(CSectionForm) DDX_FieldCBString( pDX, IDC_COURSELIST,

m_pSet->m_strCourseID, m_pSet); DDX_FieldText( pDX, IDC_ROOM, m_pSet->m_nRoomNo,

m_pSet );

DDX_FieldText( pDX, IDC_TUITION,

m_pSet->m_dwTuition, m_pSet );

//}}AFX_DATA_MAP

}

请 参 阅 DDX_FieldRadio, DDX_FieldLBString, DDX_FieldLBStringExact, DDX_FieldCB - String, DDX_FieldCBStringExact, DDX_FieldCBIndex, DDX_FieldLBIndex, DDX _- FieldScroll

DDX_LBIndex

void AFXAPI DDX_LBIndex( CDataExchange* pDX , int nID C , int& index );

参 数

pDX

nIDC

index

指向 CDataExchange 对 象 的 指 针 。 框 架 提 供 了 这 个 对 象 , 用 于 建 立 数 据交 换 的 环 境 , 包 括 其 方 向 。

与 控 件 属 性 相 关 的 列 表 框 控 件 的 资 源 ID 。

对 对 话 框 、 表 格 视 或 控 件 视 对 象 的 成 员 变 量 的 引 用 , 将 与 其 发 生 数 据 交换。

说 明

DDX_LBIndex 函 数 管 理 着 对 话 框 、 表 格 视 或 控 件 视 对 象 中 的 列 表 框 控 件 与 对话 框 、 表 格 视 或 控 件 视 对 象 的 int 型 数 据 成 员 之 间 的 int 型 数 据 交 换 。

当 DDX_LBIndex 被 调 用 的 时 候 , index 被 设 为 列 表 框 的 当 前 选 择 项 的 索 引 。 如果 没 有 选 择 任 何 项 , 则 index 被 设 为 0 。

关 于 DDX 的 更 多 信 息 参 见《 V isual C++ 教 程 》中 的“ 加 入 对 话 框 ”和《 V isual C++

程 序 员 指 南 》 中 的 “ 对 话 框 数 据 交 换 与 校 验 ” 。

请 参 阅 DDP_LBIndex

DDX_LBString

void AFXAPI DDX_LBString( CDataExchange* pDX , int nID C , CString& value );

参 数

pDX

nIDC

指向 CDataExchange 对 象 的 指 针 。 框 架 提 供 了 这 个 对 象 , 用 于 建 立 数 据交 换 的 环 境 , 包 括 其 方 向 。

value

与 控 件 属 性 相 关 的 列 表 框 控 件 的 资 源 ID 。

对 对 话 框 、 表 格 视 或 控 件 视 对 象 的 成 员 变 量 的 引 用 , 将 与 其 发 生 数 据 交换。

说 明

DDX_LBString 函 数 管 理 着 对 话 框 、 表 格 视 或 控 件 视 对 象 中 的 列 表 框 控 件 中 编辑 框 与 对 话 框 、 表 格 视 或 控 件 视 对 象 的 CString 型 数 据 成 员 之 间 的 CString 型 数据 交 换 。

当 DDX_LBString 被 调 用 的 时 候 , value 被 设 为 列 表 框 的 当 前 选 择 项 。 如 果 没 有选 择 任 何 项 , 则 index 被 设 为 空 字 符 串 。

注意 如 果 该 列 表 框 是 一 个 下 拉 列 表 框 , 交 换 的 值 被 限 制 在 255 个 字 符以内 。

关 于 DDX 的 更 多 信 息 参 见《 V isual C++ 教 程 》中 的“ 加 入 对 话 框 ”和《 V isual C++

程 序 员 指 南 》 中 的 “ 对 话 框 数 据 交 换 与 校 验 ” 。

请 参 阅 DDP_LBString

DDX_LBString Exact

void AFXAPI DDX_LBString Exac t( CDataExchange* pDX , int nID C , CString&

value );

参 数

pDX

nIDC

value

指向 CDataExchange 对 象 的 指 针 。 框 架 提 供 了 这 个 对 象 , 用 于 建 立 数 据交 换 的 环 境 , 包 括 其 方 向 。

与 控 件 属 性 相 关 的 列 表 框 控 件 的 资 源 ID 。

对 对 话 框 、 表 格 视 或 控 件 视 对 象 的 成 员 变 量 的 引 用 , 将 与 其 发 生 数 据 交换。

说 明

DDX_LBStringExact 函 数 管 理 着 对 话 框 、 表 格 视 或 控 件 视 对 象 中 的 列 表 框 控 件中 编 辑 框 与 对 话 框 、 表 格 视 或 控 件 视 对 象 的 CString 型 数 据 成 员 之 间 的 CString 型 数 据 交 换 。

当 DDX_LBStringExact 被 调 用 的 时 候 , value 被 设 为 列 表 框 的 当 前 选 择 项 。 如果 没 有 选 择 任 何 项 , 则 index 被 设 为 空 字 符 串 。

注意 如 果 该 列 表 框 是 一 个 下 拉 列 表 框 , 交 换 的 值 被 限 制 在 255 个 字 符以内 。

关 于 DDX 的 更 多 信 息 参 见《 V isual C++ 教 程 》中 的“ 加 入 对 话 框 ”和《 V isual C++

程 序 员 指 南 》 中 的 “ 对 话 框 数 据 交 换 与 校 验 ” 。

DDX_ MonthCalCtrl

void AFXAPI DDX _ MonthCalCtrl( CDataExchange* pDX , int nIDC , CTim e&

value );

void AFXAPI DDX _ MonthCalCtrl ( CDataExchange* pD X , int nIDC , COleDateTim e& value );

参 数

pDX

nIDC

指向 CDataExchange 对 象 的 指 针 。 框 架 提 供 了 这 个 对 象 , 用 于 建 立 数 据交 换 的 环 境 , 包 括 其 方 向 。 你 不 需 要 自 己 删 除 这 个 对 象 。

与 成 员 变 量 相 关 的 月 历 控 件 的 资 源 ID 。

对 对 话 框 、 表 格 视 或 控 件 视 对 象 的 CTime 或 COleDateTime 成 员 变 量 的引 用 , 将 与 其 发 生 数 据 交 换 。

说 明

DDX_MonthCalCtrl 函 数 管 理 着 对 话 框 、 表 格 视 或 控 件 视 对 象 中 的 月 历 控 件 与对 话 框 、 表 格 视 或 控 件 视 对 象 的 CTime 或 COleDateTime 型 数 据 成 员 之 间 的 数据 交 换 。

注 意 该 控 件 仅 管 理 日 期 值 。 时 间 对 象 中 的 时 间 域 被 设 为 控 件 窗 口 的 创建 时 间 , 或 者 是 通 过 CMonthCalCtrl::SetCurSel 设 置 的 任 意 时 间 。

当 DDX_MonthCalCtrl 被 调 用 的 时 候 , value 被 设 为 月 历 控 件 的 当 前 状 态 。

关 于 DDX 的 更 多 信 息 参 见《 V isual C++ 教 程 》中 的“ 加 入 对 话 框 ”和《 V isual C++

程 序 员 指 南 》 中 的 “ 对 话 框 数 据 交 换 与 校 验 ” 。

请 参 阅 DDX_DateTimeCtrl, CMonthCalCtrl, CMonthCalCtrl::GetCurSel, CmonthCalCtrl:: SetCurSel

DDX_OCBool

void AFXAPI DDX_OCBool( CDataExchange* pD X , int nIDC , DISPID dispid ,

参 数

pDX

nIDC

dispid value

指向 CDataExchange 对 象 的 指 针 。 框 架 提 供 了 这 个 对 象 , 用 于 建 立 数 据交 换 的 环 境 , 包 括 其 方 向 。

对 话 框 、 表 格 视 或 控 件 视 中 的 OLE 控 件 的 ID 。控 件 属 性 的 调 度 ID 。

对 对 话 框 、 表 格 视 或 控 件 视 对 象 的 成 员 变 量 的 引 用 , 将 与 其 发 生 数 据 交换。

说 明

DDX_OCBool 函 数 管 理 着 对 话 框 、 表 格 视 或 控 件 视 对 象 中 的 OLE 控 件 属 性 与对 话 框 、 表 格 视 或 控 件 视 对 象 的 BOOL 型 数 据 成 员 之 间 的 BOOL 型 数 据 交 换 。

关 于 DDX 的 更 多 信 息 参 见《 V isual C++ 教 程 》中 的“ 加 入 对 话 框 ”和《 V isual C++

程 序 员 指 南 》 中 的 “ 对 话 框 数 据 交 换 与 校 验 ” 。

DDX_OCBoolRO

void AFXAPI DDX_OCBoolRO( CDataExchange* pDX , int nIDC , DISPID dispid , BOOL& value );

参 数

pDX

nIDC

dispid value

指向 CDataExchange 对 象 的 指 针 。 框 架 提 供 了 这 个 对 象 , 用 于 建 立 数 据交 换 的 环 境 , 包 括 其 方 向 。

对 话 框 、 表 格 视 或 控 件 视 中 的 OLE 控 件 的 ID 。控 件 属 性 的 调 度 ID 。

对 对 话 框 、 表 格 视 或 控 件 视 对 象 的 成 员 变 量 的 引 用 , 将 与 其 发 生 数 据 交换。

说 明

DDX_OCBoolRO 函 数 管 理 着 对 话 框 、 表 格 视 或 控 件 视 对 象 中 的 OLE 控 件 的 只读 属 性 与 对 话 框 、 表 格 视 或 控 件 视 对 象 的 BOOL 型 数 据 成 员 之 间 的 BOOL 型数 据 交 换 。

关 于 DDX 的 更 多 信 息 参 见《 V isual C++ 教 程 》中 的“ 加 入 对 话 框 ”和《 V isual C++

程 序 员 指 南 》 中 的 “ 对 话 框 数 据 交 换 与 校 验 ” 。

请 参 阅 DDX_OCBool

DDX_OC Color

void AFXAPI DDX_OC Color( CDataExchange* pD X , int nIDC , DISPID dispid , OLE_COLOR & value );

参 数

pDX

nIDC

指向 CDataExchange 对 象 的 指 针 。 框 架 提 供 了 这 个 对 象 , 用 于 建 立 数 据交 换 的 环 境 , 包 括 其 方 向 。

对 话 框 、 表 格 视 或 控 件 视 中 的 OLE 控 件 的 ID 。

dispid value

控 件 属 性 的 调 度 ID 。

对 对 话 框 、 表 格 视 或 控 件 视 对 象 的 成 员 变 量 的 引 用 , 将 与 其 发 生 数 据 交换。

说 明

DDX_OCColor 函 数 管 理 着 对 话 框 、 表 格 视 或 控 件 视 对 象 中 的 OLE 控 件 的 属 性与 对 话 框 、 表 格 视 或 控 件 视 对 象 的 OLE_COLOR 型 数 据 成 员 之 间 的OLE_COLOR 型 数 据 交 换 。

关 于 DDX 的 更 多 信 息 参 见《 V isual C++ 教 程 》中 的“ 加 入 对 话 框 ”和《 V isual C++

程 序 员 指 南 》 中 的 “ 对 话 框 数 据 交 换 与 校 验 ” 。

请 参 阅 DDX_OCColorRO

DDX_OC ColorRO

void AFXAPI DDX_OC ColorRO ( CDataExchange* pDX , int nIDC , DISPID dispid , OLE_COLOR & value );

参 数

pDX

nIDC

dispid value

指向 CDataExchange 对 象 的 指 针 。 框 架 提 供 了 这 个 对 象 , 用 于 建 立 数 据交 换 的 环 境 , 包 括 其 方 向 。

对 话 框 、 表 格 视 或 控 件 视 中 的 OLE 控 件 的 ID 。控 件 属 性 的 调 度 ID 。

对 对 话 框 、 表 格 视 或 控 件 视 对 象 的 成 员 变 量 的 引 用 , 将 与 其 发 生 数 据 交换。

说 明

DDX_OCColorRO 函 数 管 理 着 对 话 框 、 表 格 视 或 控 件 视 对 象 中 的 OLE 控 件 的只 读 属 性 与 对 话 框 、 表 格 视 或 控 件 视 对 象 的 OLE_COLOR 型 数 据 成 员 之 间 的OLE_COLOR 型 数 据 交 换 。

关 于 DDX 的 更 多 信 息 参 见《 V isual C++ 教 程 》中 的“ 加 入 对 话 框 ”和《 V isual C++

程 序 员 指 南 》 中 的 “ 对 话 框 数 据 交 换 与 校 验 ” 。

请 参 阅 DDX_OCColor

DDX_OC Float

void AFXAPI DDX_OCFloat( CDataExchange* pD X , int nIDC , DISPID dispid , float& value );

void AFXAPI DDX_OCFloat( CDataExchange* pD X , int nIDC , DISPID dispid ,

double& value );

参 数

pDX

nIDC

指向 CDataExchange 对 象 的 指 针 。 框 架 提 供 了 这 个 对 象 , 用 于 建 立 数 据交 换 的 环 境 , 包 括 其 方 向 。

对 话 框 、 表 格 视 或 控 件 视 中 的 OLE 控 件 的 ID 。

dispid value

控 件 属 性 的 调 度 ID 。

对 对 话 框 、 表 格 视 或 控 件 视 对 象 的 成 员 变 量 的 引 用 , 将 与 其 发 生 数 据 交

换。

说 明

DDX_OCFloat 函 数 管 理 着 对 话 框 、 表 格 视 或 控 件 视 对 象 中 的 OLE 控 件 的 属 性与 对 话 框 、 表 格 视 或 控 件 视 对 象 的 floa t(或 double )型 数 据 成 员 之 间 的 floa t(或 double ) 型 数 据 交 换 。

关 于 DDX 的 更 多 信 息 参 见《 V isual C++ 教 程 》中 的“ 加 入 对 话 框 ”和《 V isual C++

程 序 员 指 南 》 中 的 “ 对 话 框 数 据 交 换 与 校 验 ” 。

请 参 阅 DDX_OCFloatRO

DDX_OC FloatRO

void AFXAPI DDX_OCFloat RO ( CDataExchange* pDX , int nIDC , DISPID dispid , float& value );

void AFXAPI DDX_OCFloat RO ( CDataExchange* pDX , int nIDC , DISPID dispid ,

double& value );

参 数

pDX

nIDC

dispid value

指向 CDataExchange 对 象 的 指 针 。 框 架 提 供 了 这 个 对 象 , 用 于 建 立 数 据交 换 的 环 境 , 包 括 其 方 向 。

对 话 框 、 表 格 视 或 控 件 视 中 的 OLE 控 件 的 ID 。控 件 属 性 的 调 度 ID 。

对 对 话 框 、 表 格 视 或 控 件 视 对 象 的 成 员 变 量 的 引 用 , 将 与 其 发 生 数 据 交换。

说 明

DDX_OCFloatRO 函 数 管 理 着 对 话 框 、 表 格 视 或 控 件 视 对 象 中 的 OLE 控 件 的 只读 属 性 与 对 话 框 、 表 格 视 或 控 件 视 对 象 的 float( 或 double ) 型 数 据 成 员 之 间 的float (或 double ) 型 数 据 交 换 。

关 于 DDX 的 更 多 信 息 参 见《 V isual C++ 教 程 》中 的“ 加 入 对 话 框 ”和《 V isual C++

程 序 员 指 南 》 中 的 “ 对 话 框 数 据 交 换 与 校 验 ” 。

请 参 阅 DDX_OCFloat

DDX_OC Int

void AFXAPI DDX_OC Int( CDataExchange* pD X , int nIDC , DISPID dispid , int&

value );

void AFXAPI DDX_OC Int( CDataExchange* pDX , int nID C , DISPID dispid , long &

value );

参 数

pDX

nIDC

dispid value

指向 CDataExchange 对 象 的 指 针 。 框 架 提 供 了 这 个 对 象 , 用 于 建 立 数 据交 换 的 环 境 , 包 括 其 方 向 。

对 话 框 、 表 格 视 或 控 件 视 中 的 OLE 控 件 的 ID 。控 件 属 性 的 调 度 ID 。

对 对 话 框 、 表 格 视 或 控 件 视 对 象 的 成 员 变 量 的 引 用 , 将 与 其 发 生 数 据 交换。

说 明

DDX_OCInt 函 数 管 理 着 对 话 框 、 表 格 视 或 控 件 视 对 象 中 的 OLE 控 件 的 属 性 与对 话 框 、 表 格 视 或 控 件 视 对 象 的 int( 或 long ) 型 数 据 成 员 之 间 的 in t( 或 long ) 型 数 据 交 换 。

关 于 DDX 的 更 多 信 息 参 见《 V isual C++ 教 程 》中 的“ 加 入 对 话 框 ”和《 V isual C++

程 序 员 指 南 》 中 的 “ 对 话 框 数 据 交 换 与 校 验 ” 。

请 参 阅 DDX_OCIntRO

DDX_OC IntRO

void AFXAPI DDX_OC IntRO ( CDataExchange* pD X , int nIDC, DISPID dispid , int& value );

void AFXAPI DDX_OC LongRO ( CDataExchange* pD X , int nIDC, DISPID dispid ,

long & value );

参 数

pDX

指向 CDataExchange 对 象 的 指 针 。 框 架 提 供 了 这 个 对 象 , 用 于 建 立 数 据交 换 的 环 境 , 包 括 其 方 向 。

dispid value

对 话 框 、 表 格 视 或 控 件 视 中 的 OLE 控 件 的 ID 。控 件 属 性 的 调 度 ID 。

对 对 话 框 、 表 格 视 或 控 件 视 对 象 的 成 员 变 量 的 引 用 , 将 与 其 发 生 数 据 交

换。

说 明

DDX_OCIntRO 函 数 管 理 着 对 话 框 、 表 格 视 或 控 件 视 对 象 中 的 OLE 控 件 的 只 读属 性 与 对 话 框 、 表 格 视 或 控 件 视 对 象 的 int(或 long ) 型 数 据 成 员 之 间 的 in t(或long ) 型 数 据 交 换 。

关 于 DDX 的 更 多 信 息 参 见《 V isual C++ 教 程 》中 的“ 加 入 对 话 框 ”和《 V isual C++

程 序 员 指 南 》 中 的 “ 对 话 框 数 据 交 换 与 校 验 ” 。

请 参 阅 DDX_OCInt

DDX_OC Short

void AFXAPI DDX_OC Short( CDataExchange* pD X , int nID C , DISPID dispid ,

参 数

pDX

nIDC

dispid value

指向 CDataExchange 对 象 的 指 针 。 框 架 提 供 了 这 个 对 象 , 用 于 建 立 数 据交 换 的 环 境 , 包 括 其 方 向 。

对 话 框 、 表 格 视 或 控 件 视 中 的 OLE 控 件 的 ID 。控 件 属 性 的 调 度 ID 。

对 对 话 框 、 表 格 视 或 控 件 视 对 象 的 成 员 变 量 的 引 用 , 将 与 其 发 生 数 据 交换。

说 明

DDX_OCShort 函 数 管 理 着 对 话 框 、 表 格 视 或 控 件 视 对 象 中 的 OLE 控 件 的 属 性与 对 话 框 、 表 格 视 或 控 件 视 对 象 的 short 型 数 据 成 员 之 间 的 short 型 数 据 交 换 。

关 于 DDX 的 更 多 信 息 参 见《 V isual C++ 教 程 》中 的“ 加 入 对 话 框 ”和《 V isual C++

程 序 员 指 南 》 中 的 “ 对 话 框 数 据 交 换 与 校 验 ” 。

请 参 阅 DDX_OCShortRO

DDX_OC ShortRO

void AFXAPI DDX_OC ShortRO ( CDataExchange* pD X , int nIDC , DISPID dispid , short& value );

参 数

pDX

nIDC

dispid value

指向 CDataExchange 对 象 的 指 针 。 框 架 提 供 了 这 个 对 象 , 用 于 建 立 数 据交 换 的 环 境 , 包 括 其 方 向 。

对 话 框 、 表 格 视 或 控 件 视 中 的 OLE 控 件 的 ID 。控 件 属 性 的 调 度 ID 。

对 对 话 框 、 表 格 视 或 控 件 视 对 象 的 成 员 变 量 的 引 用 , 将 与 其 发 生 数 据 交换。

说 明

DDX_OCShortRO 函 数 管 理 着 对 话 框 、 表 格 视 或 控 件 视 对 象 中 的 OLE 控 件 的 只读 属 性 与 对 话 框 、 表 格 视 或 控 件 视 对 象 的 short 型 数 据 成 员 之 间 的 short 型 数 据交 换 。

关 于 DDX 的 更 多 信 息 参 见《 V isual C++ 教 程 》中 的“ 加 入 对 话 框 ”和《 V isual C++

程 序 员 指 南 》 中 的 “ 对 话 框 数 据 交 换 与 校 验 ” 。

请 参 阅 DDX_OCShort

DDX_OC Text

void AFXAPI DDX_O CTex t( CDataExchange* pD X , int nIDC , DISPID dispid , CString& value );

参 数

pDX

nIDC

指向 CDataExchange 对 象 的 指 针 。 框 架 提 供 了 这 个 对 象 , 用 于 建 立 数 据交 换 的 环 境 , 包 括 其 方 向 。

对 话 框 、 表 格 视 或 控 件 视 中 的 OLE 控 件 的 ID 。

dispid value

控 件 属 性 的 调 度 ID 。

对 对 话 框 、 表 格 视 或 控 件 视 对 象 的 成 员 变 量 的 引 用 , 将 与 其 发 生 数 据 交换。

说 明

DDX_OCText 函 数 管 理 着 对 话 框 、 表 格 视 或 控 件 视 对 象 中 的 OLE 控 件 的 属 性与 对 话 框 、 表 格 视 或 控 件 视 对 象 的 CString 型 数 据 成 员 之 间 的 CString 型 数 据 交换 。

关 于 DDX 的 更 多 信 息 参 见《 V isual C++ 教 程 》中 的“ 加 入 对 话 框 ”和《 V isual C++

程 序 员 指 南 》 中 的 “ 对 话 框 数 据 交 换 与 校 验 ” 。

请 参 阅 DDX_OCTextRO

DDX_OC TextRO

void AFXAPI DDX_OC TextRO ( CDataExchange* pD X , int nIDC , DISPID dispid , CString& value );

参 数

pDX

nIDC

dispid value

指向 CDataExchange 对 象 的 指 针 。 框 架 提 供 了 这 个 对 象 , 用 于 建 立 数 据交 换 的 环 境 , 包 括 其 方 向 。

对 话 框 、 表 格 视 或 控 件 视 中 的 OLE 控 件 的 ID 。控 件 属 性 的 调 度 ID 。

对 对 话 框 、 表 格 视 或 控 件 视 对 象 的 成 员 变 量 的 引 用 , 将 与 其 发 生 数 据 交换。

说 明

DDX_OCTextRO 函 数 管 理 着 对 话 框 、 表 格 视 或 控 件 视 对 象 中 的 OLE 控 件 的 只读 属 性 与 对 话 框 、 表 格 视 或 控 件 视 对 象 的 CString 型 数 据 成 员 之 间 的 CString 型数 据 交 换 。

关 于 DDX 的 更 多 信 息 参 见《 V isual C++ 教 程 》中 的“ 加 入 对 话 框 ”和《 V isual C++

程 序 员 指 南 》 中 的 “ 对 话 框 数 据 交 换 与 校 验 ” 。

DDX_Radio

void AFXAPI DDX_Radio( CDataExchange* pD X , int nIDC , int& value );

参 数

pDX

nIDC

value

指向 CDataExchange 对 象 的 指 针 。 框 架 提 供 了 这 个 对 象 , 用 于 建 立 数 据交 换 的 环 境 , 包 括 其 方 向 。

与 控 件 属 性 相 关 的 单 选 控 件 的 资 源 ID 。

对 对 话 框 、 表 格 视 或 控 件 视 对 象 的 成 员 变 量 的 引 用 , 将 与 其 发 生 数 据 交换。

说 明

DDX_Radio 函 数 管 理 着 对 话 框 、 表 格 视 或 控 件 视 对 象 中 的 单 选 控 件 组 与 对 话框 、 表 格 视 或 控 件 视 对 象 的 int 型 数 据 成 员 之 间 的 int 型 数 据 交 换 。

关 于 DDX 的 更 多 信 息 参 见《 V isual C++ 教 程 》中 的“ 加 入 对 话 框 ”和《 V isual C++

程 序 员 指 南 》 中 的 “ 对 话 框 数 据 交 换 与 校 验 ” 。

DDX_Scroll

void AFXAPI DDX _Scroll ( CDataExchange* pD X , int nIDC , int& value );

参 数

pDX

nIDC

value

指向 CDataExchange 对 象 的 指 针 。 框 架 提 供 了 这 个 对 象 , 用 于 建 立 数 据交 换 的 环 境 , 包 括 其 方 向 。

与 控 件 属 性 相 关 的 滚 动 条 控 件 的 资 源 ID 。

对 对 话 框 、 表 格 视 或 控 件 视 对 象 的 成 员 变 量 的 引 用 , 将 与 其 发 生 数 据 交换。

说 明

DDX_Scroll 函 数 管 理 着 对 话 框 、 表 格 视 或 控 件 视 对 象 中 的 滚 动 条 控 件 与 对 话框 、 表 格 视 或 控 件 视 对 象 的 int 型 数 据 成 员 之 间 的 int 型 数 据 交 换 。

当 DDX_Scroll 被 调 用 时 , 将 根 据 value 的 值 设 置 滚 动 条 控 件 的 当 前 位 置 。

关 于 DDX 的 更 多 信 息 参 见《 V isual C++ 教 程 》中 的“ 加 入 对 话 框 ”和《 V isual C++

程 序 员 指 南 》 中 的 “ 对 话 框 数 据 交 换 与 校 验 ” 。

DDX_S lider

void AFXAPI DDX _Slider( CDataExchange* pD X , int nIDC , int& value );

参 数

pDX

nIDC

value

指向 CDataExchange 对 象 的 指 针 。 框 架 提 供 了 这 个 对 象 , 用 于 建 立 数 据交 换 的 环 境 , 包 括 其 方 向 。

与 控 件 属 性 相 关 的 滑 块 控 件 的 资 源 ID 。

对 对 话 框 、 表 格 视 或 控 件 视 对 象 的 成 员 变 量 的 引 用 , 将 与 其 发 生 数 据 交换。

说 明

DDX_Slider 函 数 管 理 着 对 话 框 、 表 格 视 或 控 件 视 对 象 中 的 滑 块 控 件 与 对 话 框 、表 格 视 或 控 件 视 对 象 的 int 型 数 据 成 员 之 间 的 int 型 数 据 交 换 。

当 DDX_Slider 被 调 用 时 , 将 根 据 value 的 值 设 置 滑 块 控 件 的 当 前 位 置 , 也 有 可能 是 将 value 设 为 控 件 的 当 前 位 置 , 这 取 决 于 交 换 的 方 向 。

关 于 DDX 的 更 多 信 息 参 见《 V isual C++ 教 程 》中 的“ 加 入 对 话 框 ”和《 V isual C++

程 序 员 指 南 》 中 的 “ 对 话 框 数 据 交 换 与 校 验 ” 。 有 关 滑 块 控 件 的 更 多 信 息 参 见

《 V isual C++ 程 序 员 指 南 》 中 的 “ 使 用 CSliderCtrl” 。

请 参 阅 DDX_FieldSlider, DDV_MinMaxSlider

DDX_Text

void AFXAPI DDX_Text( CDataExchange* pD X , int nIDC , BYTE& value ); void AFXAPI DDX_Text( CDataExchange* pD X , int nIDC , short& value ); void AFXAPI DDX_Text( CDataExchange* pD X , int nIDC , int& value ); void AFXAPI DDX_Text( CDataExchange* pD X , int nIDC , UINT& value ); void AFXAPI DDX_Text( CDataExchange* pD X , int nIDC , long& value );

void AFXAPI DDX_Text( CDataExchange* pD X , int nIDC , DWORD& value ); void AFXAPI DDX_Text( CDataExchange* pD X , int nIDC , CString& value ); void AFXAPI DDX_Text( CDataExchange* pD X , int nIDC , float& value ); void AFXAPI DDX_Text( CDataExchange* pD X , int nIDC , double& value );

void AFXAPI DDX_Text( CDataExchange* pD X , int nIDC , COleCurrency&

value );

void AFXAPI DDX_Text( CDataExchange* pDX , int nIDC , COleDateTime&

value );

参 数

pDX

nIDC

value

指向 CDataExchange 对 象 的 指 针 。 框 架 提 供 了 这 个 对 象 , 用 于 建 立 数 据交 换 的 环 境 , 包 括 其 方 向 。

对 话 框 、 表 格 视 或 控 件 视 中 编 辑 控 件 的 ID 。

对 对 话 框 、 表 格 视 或 控 件 视 对 象 的 成 员 变 量 的 引 用 , 其 类 型 取 决 于 你 使用了 DDX_Text 的 哪 一 个 重 载 版 本 。

说 明

DDX_Text 函 数 管 理 着 对 话 框 、 表 格 视 或 控 件 视 对 象 中 的 编 辑 控 件 与 对 话 框 、表 格 视 或 控 件 视 对 象 的 CString 型 数 据 成 员 之 间 的 in t, UIN T , long , DWORD , CString , float 或 double 型 数 据 交 换 。

关 于 DDX 的 更 多 信 息 参 见 Visual C++ 联 机 教 程 中 的“ 加 入 对 话 框 ”和 V isual C++

程 序 员 联 机 指 南 中 的 “ 对 话 框 数 据 交 换 与 校 验 ” 。

DEBUG_NEW

#define new DEBUG_NEW

说 明

用 于 帮 助 发 现 内 存 泄 漏 。 你 可 以 在 程 序 中 原 来 使 用 new 操 作 符 来 分 配 内 存 的 任何 地 方 使 用 DEBUG_NEW 。

在 调 试 模 式 ( 当 定 义 了 _DEBUG 符 号 时 ) 中 , DEBUG_NEW 记 录 它 所 分 配 的每 个 对 象 的 文 件 名 和 行 号 。然 后 ,当 你 使 用 CMemoryState::DumpAllObjectsSince 成 员 函 数 时 , 每 个 用 DEBUG_NEW 分 配 的 对 象 将 与 发 生 分 配 的 文 件 名 和 行 号一 起 现 实 。

#define new DEBUG_NEW

一 旦 你 插 入 了 这 个 指 令 , 预 处 理 程 序 就 会 在 你 使 用 new 的 地 方 插 入DEBUG_NEW , 剩 下 的 事 情 由 MFC 完 成 。 当 你 编 译 你 的 程 序 的 发 行 版 本 时 , DEBUG_NEW 转 变 为 简 单 的 new 操 作 , 也 不 再 生 成 文 件 名 和 行 号 信 息 。

注 意 在 MFC 的 以 前 版 本 ( 4.1 或 更 早 ) 中 , 你 必 须 在 调 用IMPLEMENT_DYNCREATE 或 IMPLEMENT_SERIAL 宏 的 语 句 后 面 加 入 #define 语 句 , 现 在 不 再 需 要 这 样 做 了 。

关 于 DEBUG_NEW 宏 的 更 多 信 息 参 见 “ V isual C++ 程 序 员 指 南 ” 中 的 “ MFC

调 试 支 持 ” 。

DECLARE_CONNECTION_MAP

DECLARE_CONNECTION_MAP( )

说 明

在 你 的 程 序 中 每 一 个 COleControl 的 派 生 类 都 可 以 提 供 一 个 连 接 映 射 , 以 指 定你 的 控 制 支 持 的 附 加 的 连 接 点 。

如 果 你 的 控 制 支 持 附 加 的 连 接 点 , 就 在 你 的 类 声 明 的 末 尾 使 用

中 , 加 入 BEGIN_CONNECTION_MAP 宏 , 为 控 制 的 每 个 连 接 点 加 上CONNECTION_PART 宏 , 最 后 用 END_CONNECTION_MAP 宏 来 声 明 连 接 映射 的 结 束 。

请 参 阅 BEGIN_CONNECTION_PART, BEGIN_CONNECTION_MAP, CONNECTION_IID

DECLARE_DISPATCH_MAP

DECLARE_DISPATCH_MAP( )

说 明

如 果 你 的 程 序 中 的 CCmdTarget 的 派 生 类 支 持 OLE 自 动 化 , 这 个 类 必 须 提 供 一个 调 度 映 射 以 公 开 它 的 方 法 和 属 性 。 在 你 的 类 声 明 的 末 尾 使 用DECLARE_DISPATCH_MAP 宏 。 然 后 , 在 实 现 了 类 成 员 函 数 的 .CPP 文 件 中 加入 BEGIN_DISPATCH_MAP 宏 。 然 后 为 你 的 类 的 每 个 公 开 的 方 法 和 属 性 加 入宏 入 口 ( DISP_FUNCTION , DISP_PROPERTY 等 ) 。 最 后 , 使 用END_DISPATCH_MAP 宏 。

注意 如 果 你 在 DECLARE_DISPATCH_MAP 之 后 定 义 了 成 员 , 你 必 须 为 它 们

指 定 一 个 新 的 访 问 类 型 ( public , private 或 protected ) 。

AppWizard 和 ClassWizard 帮 助 你 创 建 自 动 化 类 并 维 护 调 度 映 射 。 参 见 关 于“ AppWizard ” 以 及 “ ClassWizard : 自 动 化 支 持 ” 的 文 章 。 有 关 调 度 映 射 的 更多 信 息 参 见 “ 自 动 化 服 务 器 ” 。 所 有 的 文 章 都 在 “ Visual C++ 程 序 员 指 南 ” 中 。

示 例

// DECLARE_DISPATCH_MAP 的 例 子

class CMyDoc : public CDocument

{

// 成 员 声 明

DECLARE_DISPATCH_MAP()

};

请 参 阅 D ispatch Maps, BEGIN_DISPATCH_MAP, END_DISPATCH_MAP,

DISP_FUNCTION, DISP_PROPERTY, DISP_PROPERTY_EX, DISP_DEFVALUE

DECLARE_DYNAMIC

DECLARE_DYNAMIC( class_name )

参 数

class_name

类 的 实 际 名 字 ( 不 用 引 号 括 起 来 ) 。

说 明

当 你 从 CObject 继 承 一 个 类 的 时 候 , 这 个 宏 加 入 了 访 问 类 的 运 行 时 信 息 的 能 力 。

在 类 的 头 文 件 ( .H ) 中 加 入 DECLARE_DYNAMIC 宏 , 然 后 在 所 有 需 要 访 问 这个 类 的 对 象 的 .CPP 模 块 中 包 含 这 个 头 文 件 。

如 果 你 按 照 前 面 描 述 的 方 式 使 用 了 DECLARE_DYNAMIC 和IMPLEMENT_DYNAMIC 宏 , 你 就 可 以 在 运 行 时 利 用 RUNTIME_CLASS 宏 和CObject::IsKindOf 函 数 来 确 定 对 象 所 属 的 类 。

如 果 在 类 声 明 中 包 含 了 DECLARE_DYNAMIC , 那 么 必 须 在 类 的 实 现 中 包 含

IMPLEMENT_DYNAMIC 宏 。

有 关 DECLARE_DYNAMIC 宏 的 更 多 信 息 参 见 “ Visual C++ 程 序 员 指 南 ” 中 的

请 参 阅 IMPLEMENT_DYNAMIC, DECLARE_DYNCREATE, DECLARE_SERIAL, RUNTIME_CLASS, CObject::IsKindOf

DECLARE_DYNCREATE

DECLARE_DYNCREATE( class_name )

参 数

class_name

类 的 实 际 名 字 ( 不 用 引 号 括 起 来 ) 。

说 明

使 用 DECLARE_DYNCREATE 宏 可 以 使 每 个 CObject 的 派 生 类 的 对 象 具 有 运行 时 动 态 创 建 的 能 力 。 框 架 利 用 这 种 能 力 来 动 态 创 建 对 象 , 例 如 , 当 它 在 串 行化 过 程 中 从 磁 盘 读 取 对 象 的 时 候 。 文 档 、 视 和 框 架 类 必 须 支 持 动 态 创 建 , 因 为框 架 需 要 动 态 地 创 建 它 们 。

在 类 的 .H 模 块 中 加 入 DECLARE_DYNCREATE 宏 , 然 后 在 每 个 需 要 访 问 这 个类 的 对 象 的 .CPP 模 块 中 包 含 这 个 模 块 。

含 IMPLEMENT_DYNCREATE 宏 。

关 于 DECLARE_DYNCREATE 宏 的 更 多 信 息 参 见 “ V isual C++ 程 序 员 指 南 ” 中的 “ CObject 类 主 题 ” 。

请 参 阅 DECLARE_DYNAMIC, IMPLEMENT_DYNAMIC, IMPLEMENT_DYNCREATE, RUNTIME_CLASS, CObject::IsKindOf

DECLARE_EVENT_MAP

DECLARE_EVENT_MAP( )

说 明

你 的 程 序 中 的 每 个 COleControl 的 派 生 类 都 能 够 提 供 一 个 事 件 映 射 , 以 指 定 你的 控 制 可 能 引 发 的 事 件 。 在 你 的 类 声 明 的 末 尾 使 用 DECLARE_EVENT_MAP 宏 。 然 后 , 在 实 现 类 成 员 函 数 的 .CPP 文 件 中 使 用 BEGIN_ENENT_MAP 宏 , 再加 入 每 个 控 制 事 件 的 宏 入 口 , 最 后 用 END_EVENT_MAP 宏 来 声 明 事 件 列 表 的结 束 。

关 于 事 件 映 射 的 更 多 信 息 参 见 “ V isual C++ 程 序 员 指 南 ” 中 的 文 章 “ ActiveX 控制 : 事 件 ” 。

EVENT_CUSTOM_ID

DECLARE_EVENTSINK_MAP

DECLARE_EVENTSINK_MAP( )

说 明

OLE 容 器 能 够 提 供 事 件 接 收 映 射 以 指 定 你 的 容 器 能 够 接 收 的 事 件 。 在 你 的 类 声明 的 末 尾 使 用 DECLARE_EVENTSINK_MAP 宏 。 然 后 在 实 现 了 类 成 员 函 数的 .CPP 文 件 中 使 用 BEGIN_EVENTSINK_MAP 宏 , 再 加 入 可 以 接 收 的 事 件 的宏 入 口 , 最 后 用 END_EVENTSINK_MAP 宏 来 声 明 事 件 接 收 列 表 的 结 束 。

关 于 事 件 接 收 映 射 的 更 多 信 息 参 见“ V isual C++ 程 序 员 指 南 ”中 的 文 章“ ActiveX

控 制 容 器 ” 。

请 参 阅 BEGIN_EVENTSINK_MAP, END_EVENTSINK_MAP, ON_EVENT, ON_PROPNOTIFY

DECLARE_MESSAGE_MAP

DECLARE_MESSAGE_MAP( )

说 明

你 的 程 序 中 的 每 一 个 CCmdTarget 的 派 生 类 都 可 以 提 供 一 个 消 息 映 射 以 处 理 消息 。 在 你 的 类 声 明 的 末 尾 使 用 DECLARE_MESSAGE_MAP 宏 。 然 后 , 在 实 现了 类 成 员 函 数 的 .CPP 文 件 中 加 入 BEGIN_MESSAGE_MAP 宏 , 再 加 入 每 个 消息 处 理 函 数 的 宏 入 口 , 最 后 使 用 END_MESSAGE_MAP 宏 。

注意 如 果 你 在 DECLARE_MESSAGE_MAP 之 后 定 义 了 成 员 , 那 么 你 必 须 为它 们 指 定 新 的 访 问 类 型 ( public , private 或 protected ) 。

关 于 消 息 映 射 和 DECLARE_MESSAGE_MAP 宏 的 更 多 信 息 参 见 “ V isual C++

程 序 员 指 南 ” 中 的 “ 消 息 处 理 ” 和 “ 映 射 主 题 ” 。

示 例

// DECLARE_MESSAGE_MAP 的 例 子

class CMyWnd : public CFrameWnd

{

// 成 员 声 明

DECLARE_MESSAGE_MAP( )

};

请 参 阅 BEGIN_MESSAGE_MAP, END_MESSAGE_MAP

DECLARE_OLECREATE

DECLARE_OLECREATE( class_name ) #include <afxdisp.h>

参 数

class_name

类 的 实 际 名 字 ( 不 用 引 号 括 起 来 ) 。

说 明

DECLARE_OLECREATE 宏 使 得 CCmdTarget 的 派 生 类 的 对 象 能 够 在 OLE 自 动化 的 过 程 中 被 创 建 。 这 个 宏 使 具 有 OLE 能 力 的 应 用 程 序 可 以 创 建 这 种 类 型 的对 象 。

在 类 的 .H 模 块 中 加 入 DECLARE_OLECREATE 宏 , 然 后 在 每 个 需 要 访 问 这 个类 对 象 的 .CPP 模 块 中 包 含 这 个 模 块 。

如 果 在 类 的 声 明 中 包 含 了 DECLARE_OLECREATE 宏 , 那 么 必 须 在 类 实 现 中加 入 IMPLEMENT_OLECREATE 宏 。 使 用 了 DECLARE_OLECREATE 的 类 声明 也 必 须 使 用 DECLARE_DYNCREATE 或 DECLARE_SERIA L。

请 参 阅 IMPLEMENT_OLECREATE, DECLARE_DYNCREATE,

DECLARE_SERIAL

DECLARE_OLECREATE_EX

DECLARE_OLECREATE_EX( class_name )

参 数

class_name

控 制 类 的 名 字 。

说 明

定 义 了 控 制 类 的 类 工 厂 和 GetClassID 成 员 函 数 。 在 不 支 持 许 可 的 控 制 类 的 头 文件 中 使 用 这 个 宏 。

注 意 这 个 宏 与 下 面 例 子 代 码 的 作 用 相 同 : BEGIN_OLEFACTORY(CSampleCtrl) END_OLEFACTORY(CSampleCtrl)

请 参 阅 BEGIN_OLEFACTORY, END_OLEFACTORY

DECLARE_OLETYPELIB

DECLARE_OLETYPELIB( class_name )

参 数

class_name

与 类 型 库 相 关 的 控 制 类 的 名 字 。

说 明

定 义 了 控 制 类 的 GetTypeLib 成 员 函 数 。 在 控 制 类 的 头 文 件 中 使 用 这 个 宏 。

请 参 阅 IMPLEMENT_OLETYPELIB

DECLARE_PROPPAGEIDS

DECLARE_PROPPAGEIDS( class_name )

参 数

class_name

拥 有 属 性 页 的 控 制 类 的 名 字 。

说 明

OLE 控 制 能 够 提 供 一 个 属 性 页 列 表 以 显 示 它 的 属 性 。 在 你 的 类 声 明 的 末 尾 使 用DECLARE_PROPPAGEIDS 宏 。 然 后 , 在 定 义 了 类 成 员 函 数 的 .CPP 文 件 中 使 用BEGIN_PROPPAGEIDS 宏 , 再 加 入 控 制 的 属 性 页 的 入 口 , 最 后 用END_PROPPAGEIDS 宏 来 声 明 属 性 页 列 表 的 结 束 。

关 于 属 性 页 的 更 多 信 息 参 见“ V isual C++ 程 序 员 指 南 ” 中 的 文 章“ ActiveX 控 制 : 属 性 页 ” 。

请 参 阅 BEGIN_PROPPAGEIDS, END_PROPPAGEIDS

DECLARE_SERIAL

DECLARE_SERIAL ( class_name )

参 数

class_name

类 的 实 际 名 字 ( 不 用 引 号 括 起 来 ) 。

说 明

DECLARE_SERIAL 为 可 以 串 行 化 的 CObject 的 派 生 类 生 成 了 必 要 的 C++ 代 码 。

串 行 化 是 指 将 对 象 的 内 容 写 入 文 件 或 从 文 件 读 入 对 象 的 内 容 的 过 程 。

在 .H 模 块 中 使 用 DECLARE_SERIAL 宏 , 然 后 在 所 有 需 要 访 问 这 个 类 的 对 象的 .CPP 模 块 中 包 含 这 个 模 块 。

如 果 在 类 声 明 中 包 含 了 DECLARE_SERIAL 宏 , 那 么 必 须 在 类 实 现 中 包 含

IMPLEMENT_SERIAL 宏。

DECLARE_SERIAL 宏 包 含 了 DECLARE_DYNAMIC 和

DECLARE_DYNCREATE 的 所 有 功 能 。

你 可 以 用 AFX_API 宏 为 那 些 使 用 了 DECLARE_SERIAL 和IMPLEMENT_SERIAL 宏 的 类 自 动 引 出 CArchive 提 取 操 作 符 。 用 下 面 的 代 码将 类 声 明 ( 在 .H 文 件 中 ) 括 起 来 :

#undef AFX_API

#define AFX_API AFX_EXT_CLASS

< 这 里 是 你 的 类 声 明 > #undef AFX_API #define AFX_API

关 于 DECLARE_SERIAL 宏 的 更 多 信 息 参 见 “ Visual C++ 程 序 员 指 南 ” 中 的“ CObject 类 主 题 ” 。

请 参 阅 DECLARE_DYNAMIC, IMPLEMENT_SERIAL, RUNTIME_CLASS,

CObject::IsKindOf

DEFAULT_PARSE_COMMAND( FnName, mapClass )

参 数

FnName

成 员 函 数 的 名 字 。 也 是 命 令 的 名 字 。

mapClass

函 数 映 射 的 目 的 类 的 名 字 。

说 明

如 果 一 个 客 户 向 CHttpServer 对 象 提 出 的 请 求 不 包 括 命 令 , DEFAULT_PARSE_COMMAND 宏 就 指 示 框 架 调 入 FnName 参 数 指 定 的 缺 省 页面 。

DEFAULT_PARSE_COMMAND 宏 可 以 出 现 在 解 析 映 射 的 任 何 位 置 。解 析 映 射 的 例 子 参 看 ON_PARSE_COMMAND 。

请 参 阅 BEGIN_PARSE_MAP, ON_PARSE_COMMAND, ON_PARSE_COMMAND_PARAMS, END_PARSE_MAP, CHttpServer

template< class TYPE >

void AFXAPI DestructElements( TYPE * pElements, int nCount );

参 数

TYPE

指 定 了 要 销 毁 的 元 素 类 型 的 模 板 参 数 。

pElements

指 向 元 素 的 指 针 。

nCoun t

要 销 毁 的 元 素 的 数 目 。

说 明

当 元 素 要 被 销 毁 时 , CArray , CList 和 CMap 的 类 成 员 调 用 这 个 函 数 。

缺 省 的 实 现 不 做 任 何 操 作 。 有 关 这 个 函 数 以 及 其 它 帮 助 函 数 的 实 现 的 信 息 参 见

V isual C++ 程 序 员 指 南 中 的 文 章 “ 集 合 : 如 何 生 成 类 型 安 全 的 集 合 ” 。

请 参 阅 CArray, CList, CMap

void AFXAPI DFX_Binary( CDaoFieldExchange* pFX , LPCTSTR szNam e, CByteArray& value , int nPreAllocSize = AFX_DAO_BINARY_DEFAULT_SIZE, D W O R D dwBindOptions = 0 );

参 数

pFX

指 向 CDaoFieldExchange 类 的 对 象 的 指 针 。 这 个 对 象 包 含 函 数 调 用 的 环境 信 息 。 有 关 CDaoFieldExchange 对 象 能 够 指 定 的 操 作 的 附 加 信 息 参 见Visual C++ 程 序 员 指 南 中 的 文 章“ DAO 记 录 字 段 交 换 : DFX 如何工作” 。

szName

数 据 列 的 名 字 。

value

指 定 的 数 据 成 员 中 保 存 的 值 – – – – 要 被 传 送 的 值 。 对 于 从 记 录 集 到 数 据 源的 数 据 传 送 , CByteArray 类 型 的 值 是 从 指 定 的 数 据 成 员 中 获 取 的 。 对 于从 数 据 源 到 记 录 集 的 数 据 传 送 , 该 值 是 保 存 在 指 定 的 数 据 成 员 中 的 。

nPreAllocSize

应 用 框 架 预 分 配 这 么 多 内 存 。 如 果 你 的 数 据 更 多 , 框 架 会 在 必 要 时 分 配更 多 的 内 存 。 要 获 得 更 好 的 性 能 , 将 这 个 大 小 设 为 一 个 足 够 大 的 值 以 避

免 重 分 配 。 在 AFXDAO.H 中 , 缺 省 的 大 小 被 定 义 为

AFX_DAO_BINARY_DEFAULT_SIZE 。

dwBindOptions

使 你 能 够 享 受 MFC 的 双 缓 冲 机 制 好 处 的 选 项 , 该 机 制 能 够 检 测 发 生 了变 化 的 记 录 集 字 段 。 缺 省 值 AFX_DAO_DISABLE_FIELD_CACHE 并 不使 用 双 缓 冲 机 制 , 你 必 须 自 己 调 用 SetFieldDirty 和 SetFieldNull 。 另 外 一个 可 能 值 AFX_DAO_ENABLE_FIE - LD_CACHE 使 用 双 缓 冲 机 制 , 你 不必 进 行 额 外 的 操 作 以 将 一 个 字 段 标 记 为 脏 的 或 NULL 。 由 于 性 能 和 内 存方 面 的 原 因 , 不 要 使 用 这 个 值 , 除 非 你 的 二 进 制 数 据 确 实 很 小 。

这 些 选 项 在 V isual C++ 程 序 员 指 南 的“ DAO 记 录 字 段 交 换 : 双 缓 冲 记 录 ” 一 文 中 有 进 一 步 的 解 释 。

注 意 可 以 通 过 设 置 CDa oRecordset::m_bCheckCacheForDirtyFields 来 控 制 是 否 对 数 据 使 用 双 缓 冲 机 制 。

说 明

DFX_Binary 函 数 在 CDaoRecordset 对 象 的 字 段 数 据 成 员 和 数 据 源 中 记 录 的 列 之间 交 换 字 节 数 组 。数 据 在 DAO 中 的 DAO_BYTES 类 型 和 记 录 集 中 的 CByteArray 类 型 之 间 进 行 映 射 。

示 例

参 见 DFX_Text.

请 参 阅 DFX_Text, DFX_Bool, DFX_Currency, DFX_Long, DFX_Short, DFX_Single, DFX_Double, DFX_DateTime, DFX_Byte, DFX_LongBinary, CDaoFieldExchange::SetFieldType

DFX_Bool

void AFXAPI DFX_Bool( CDaoFieldExchange* pFX , LPCTSTR szNam e, BOOL&

value , D W O R D dwBindOptions = AFX_DAO_ENABLE_FIELD_CACHE );

参 数

pFX

指 向 CDaoFieldExchange 类 的 对 象 的 指 针 。 这 个 对 象 包 含 函 数 调 用 的 环境 信 息 。 有 关 CDaoFieldExchange 对 象 能 够 指 定 的 操 作 的 附 加 信 息 参 见“ V isual C++ 程 序 员 指 南 ” 中 的 文 章 “ DAO 记 录 字 段 交 换 : DFX 如 何 工作 ” 。

szName

数 据 列 的 名 字 。

value

指 定 的 数 据 成 员 中 保 存 的 值 – – – – 要 被 传 送 的 值 。 对 于 从 记 录 集 到 数 据 源的 数 据 传 送 , BOOL 类 型 的 值 是 从 指 定 的 数 据 成 员 中 获 取 的 。 对 于 从 数据 源 到 记 录 集 的 数 据 传 送 , 该 值 是 保 存 在 指 定 的 数 据 成 员 中 的 。

dwBindOptions

使 你 能 够 享 受 MFC 的 双 缓 冲 机 制 好 处 的 选 项 , 该 机 制 能 够 检 测 发 生 了变 化 的 记 录 集 字 段 。 缺 省 值 AFX_DAO_ENABLE_FIELD_CACHE 使 用双 缓 冲 机 制 。 另 外 一 个 可 能 值 是 AFX_DAO_DISABLE_FIELD_CACH E。如 果 你 指 定 了 这 个 值 , MFC 并 不 对 这 个 字 段 进 行 检 查 。 你 必 须 自 己 调 用SetFieldDirty 和 SetFieldNull 。

这 些 选 项 在 “ V isual C++ 程 序 员 指 南 ” 的 “ DAO 记 录 集 : 动 态 记 录 绑 定 ” 一 文 中 有 进 一 步 的 解 释 。

注 意 可 以 通 过 设 置 CDa oRecordset::m_bCheckCacheForDirtyFields 来 控 制 是 否 对 数 据 使 用 双 缓 冲 机 制 。

说 明

DFX_BOOL 函 数 在 CDaoRecordset 对 象 的 字 段 数 据 成 员 和 数 据 源 中 记 录 的 列 之间 交 换 布 尔 数 据 。 数 据 在 D A O 中 的 DAO_BOOL 类 型 和 记 录 集 中 的 BOOL 类型 之 间 进 行 映 射 。

示 例

参 见 DFX_Text.

请 参 阅 DFX_Text, DFX_Long, DFX_Currency, DFX_Short, DFX_Single, DFX_Double, DFX_DateTime, DFX_Byte, DFX_Binary, DFX_LongBinary, CDaoFieldExchange::SetFieldType

DFX_Byte

void AFXAPI DFX_Byte( CDaoFieldExchange* pFX , LPCTSTR szNam e, BYTE&

value , D W O R D dwBindOptions = AFX_DAO_ENABLE_FIELD_CACHE );

参 数

pFX

指 向 CDaoFieldExchange 类 的 对 象 的 指 针 。 这 个 对 象 包 含 函 数 调 用 的 环境 信 息 。 有 关 CDaoFieldExchange 对 象 能 够 指 定 的 操 作 的 附 加 信 息 参 见“ V isual C++ 程 序 员 指 南 ” 中 的 文 章 “ DAO 记 录 字 段 交 换 : DFX 如 何 工作 ” 。

szName

数 据 列 的 名 字 。

value

指 定 数 据 成 员 中 保 存 的 值 – – – – 要 被 传 送 的 值 。 对 于 从 记 录 集 到 数 据 源 的数 据 传 送 , BYTE 类 型 的 值 是 从 指 定 的 数 据 成 员 中 获 取 的 。 对 于 从 数 据源 到 记 录 集 的 数 据 传 送 , 该 值 是 保 存 在 指 定 的 数 据 成 员 中 的 。

dwBindOptions

使 你 能 够 享 受 MFC 的 双 缓 冲 机 制 好 处 的 选 项 , 该 机 制 能 够 检 测 发 生 了变 化 的 记 录 集 字 段 。 缺 省 值 AFX_DAO_ENABLE_FIELD_CACHE 使 用双 缓 冲 机 制 。 另 外 一 个 值 可 能 是 AFX_DAO_DISABLE_FIELD_CACH E。如 果 你 指 定 了 这 个 值 , MFC 并 不 对 这 个 字 段 进 行 检 查 。 你 必 须 自 己 调 用SetFieldDirty 和 SetFieldNull 。

这 些 选 项 在 “ V isual C++ 程 序 员 指 南 ” 的 “ DAO 记 录 集 : 动 态 记 录 绑 定 ” 一 文 中 有 进 一 步 的 解 释 。

注 意 可 以 通 过 设 置 CDa oRecordset::m_bCheckCacheForDirtyFields 来 控 制 是 否 对 数 据 使 用 双 缓 冲 机 制 。

说 明

DFX_BYTE 函 数 在 CDaoRecordset 对 象 的 字 段 数 据 成 员 和 数 据 源 中 记 录 的 列 之间 交 换 单 字 节 数 据 。 数 据 在 D A O 中 的 DAO_BYTES 类 型 和 记 录 集 中 的 BYTE 类 型 之 间 进 行 映 射 。

示 例

参 见 DFX_Text.

请 参 阅 DFX_Text, DFX_Bool, DFX_Currency, DFX_Long, DFX_Short, DFX_Single, DFX_Double, DFX_DateTime, DFX_Binary, DFX_LongBinary, CDaoFieldExchange::SetFieldType

DFX_Currency

void AFXAPI DFX_Currency( CDaoFieldExchange* pFX, LPCTSTR szNam e, COleCurrency& value , D W O R D dwBindOptions = AFX_DAO_ENABLE_FIELD_CACHE );

参 数

pFX

指 向 CDaoFieldExchange 类 的 对 象 的 指 针 。 这 个 对 象 包 含 函 数 调 用 的 环境 信 息 。 有 关 CDaoFieldExchange 对 象 能 够 指 定 的 操 作 的 附 加 信 息 参 见“ V isual C++ 程 序 员 指 南 ” 中 的 文 章 “ DAO 记 录 字 段 交 换 : DFX 如 何 工作 ” 。

szName

value

数 据 列 的 名 字 。

指 定 的 数 据 成 员 中 保 存 的 值 – – – – 要 被 传 送 的 值 。 对 于 从 记 录 集 到 数 据 源的 数 据 传 送 , 该 COleCurrency 值 是 从 指 定 的 数 据 成 员 中 获 取 的 。 对 于 从数 据 源 到 记 录 集 的 数 据 传 送 , 该 值 是 保 存 在 指 定 的 数 据 成 员 中 的 。

dwBindOptions

使 你 能 够 享 受 MFC 的 双 缓 冲 机 制 的 好 处 的 选 项 , 该 机 制 能 够 检 测 发 生了 变 化 的 记 录 集 字 段 。 缺 省 值 AFX_DAO_ENABLE_FIELD_CACHE 使用 双 缓 冲 机 制 。 另 外 一 个 可 能 值 是AFX_DAO_DISABLE_FIELD_CACHE 。 如 果 你 指 定 了 这 个 值 , MFC 并不 对 这 个 字 段 进 行 检 查 。 你 必 须 自 己 调 用 SetFieldDirty 和 SetFieldNull。

这 些 选 项 在 “ V isual C++ 程 序 员 指 南 ” 的 “ DAO 记 录 集 : 动 态 记 录 绑 定 ” 一 文 中 有 进 一 步 的 解 释 。

注 意 可 以 通 过 设 置 CDa oRecordset::m_bCheckCacheForDirtyFields

来 控 制 是 否 对 数 据 使 用 双 缓 冲 机 制 。

说 明

DFX_Currency 函 数 在 CDaoRecordset 对 象 的 字 段 数 据 成 员 和 数 据 源 中 记 录 的 列之 间 交 换 货 币 数 据 。 数 据 在 DAO 中 的 DAO_CURRENCY 类 型 和 记 录 集 中 的COleCurrency 类 型 之 间 进 行 映 射 。

示 例

参 见 DFX_Text.

请 参 阅 DFX_Text, DFX_Bool, DFX_DateTime, DFX_Long, DFX_Short, DFX_Single, DFX_Double, DFX_Byte, DFX_Binary, DFX_LongBinary, CDaoFieldExchange::SetFieldType

DFX_DateTime

void AFXAPI DFX_DateTime( CDaoFieldExchange* pFX , LPCTSTR szNam e , COleDateTime& value , D W O R D dwBindOptions = AFX_DAO_ENABLE_FIELD_CACHE );

参 数

pFX

指 向 CDaoFieldExchange 类 的 对 象 的 指 针 。 这 个 对 象 包 含 函 数 调 用 的 环境 信 息 。 有 关 CDaoFieldExchange 对 象 能 够 指 定 的 操 作 的 附 加 信 息 参 见“ V isual C++ 程 序 员 指 南 ” 中 的 文 章 “ DAO 记 录 字 段 交 换 : DFX 如 何 工作 ” 。

szName

value

数 据 列 的 名 字 。

指 定 的 数 据 成 员 中 保 存 的 值 – – – – 要 被 传 送 的 值 。 这 个 函 数 保 存 着 对 一 个COleDateTime 对 象 的 引 用 。 对 于 从 记 录 集 到 数 据 源 的 数 据 传 送 , 该 值 是从 指 定 的 数 据 成 员 中 获 取 的 。 对 于 从 数 据 源 到 记 录 集 的 数 据 传 送 , 该 值是 保 存 在 指 定 的 数 据 成 员 中 的 。

dwBindOptions

使 你 能 够 享 受 MFC 的 双 缓 冲 机 制 的 好 处 的 选 项 , 该 机 制 能 够 检 测 发 生了 变 化 的 记 录 集 字 段 。 缺 省 值 AFX_DAO_ENABLE_FIELD_CACHE 使用 双 缓 冲 机 制 。 另 外 一 个 可 能 值 是AFX_DAO_DISABLE_FIELD_CACHE 。 如 果 你 指 定 了 这 个 值 , MFC 并不 对 这 个 字 段 进 行 检 查 。 你 必 须 自 己 调 用 SetFieldDirty 和 SetFieldNull。

这 些 选 项 在 “ V isual C++ 程 序 员 指 南 ” 的 “ DAO 记 录 集 : 动 态 记 录 绑 定 ” 一 文 中 有 进 一 步 的 解 释 。

注 意 可 以 通 过 设 置 CDa oRecordset::m_bCheckCacheForDirtyFields 来 控 制 是 否 对 数 据 使 用 双 缓 冲 机 制 。

说 明

DFX_DateTime 函 数 在 CDaoRecordset 对 象 的 字 段 数 据 成 员 和 数 据 源 中 记 录 的

列 之 间 交 换 日 期 和 时 间 数 据 。 数 据 在 DAO 中的 DAO_DATE 类 型 和 记 录 集 中的 COleDateTime 类 型 之 间 进 行 映 射 。

注 意 COleDateTime 取 代 了 DAO 中 用 于 相 同 目 的 的 CTime 和TIMESTAMP_STRUCT 。但 是 CTime 和 TIMESTAMP_STRUCT 仍 被 用 于 基 于 ODBC

的 数 据 访 问 类 。

示 例

参 见 DFX_Text.

请 参 阅 DFX_Text, DFX_Bool, DFX_Currency, DFX_Long, DFX_Short, DFX_Single, DFX_Double, DFX_Byte, DFX_Binary, DFX_LongBinary, CDaoFieldExchange::SetFieldType

DFX_Double

void AFXAPI DFX_Double( CDaoFieldExchange* pFX , LPCTSTR szNam e, double& value, D W O R D dwBindOptions = AFX_DAO_ENABLE_FIELD_CACHE );

参 数

pFX

指 向 CDaoFieldExchange 类 的 对 象 的 指 针 。 这 个 对 象 包 含 函 数 调 用 的 环境 信 息 。 有 关 CDaoFieldExchange 对 象 能 够 指 定 的 操 作 的 附 加 信 息 参 见“ V isual C++ 程 序 员 指 南 ” 中 的 文 章 “ DAO 记 录 字 段 交 换 : DFX 如 何 工作 ” 。

szName

数 据 列 的 名 字 。

value

指 定 的 数 据 成 员 中 保 存 的 值 – – – – 要 被 传 送 的 值 。 对 于 从 记 录 集 到 数 据 源的 数 据 传 送 , 该 double 值 是 从 指 定 的 数 据 成 员 中 获 取 的 。 对 于 从 数 据 源到 记 录 集 的 数 据 传 送 , 该 值 是 保 存 在 指 定 的 数 据 成 员 中 的 。

dwBindOptions

使 你 能 够 享 受 MFC 的 双 缓 冲 机 制 的 好 处 的 选 项 , 该 机 制 能 够 检 测 发 生了 变 化 的 记 录 集 字 段 。 缺 省 值 AFX_DAO_ENABLE_FIELD_CACHE 使用 双 缓 冲 机 制 。 另 外 一 个 可 能 值 是AFX_DAO_DISABLE_FIELD_CACHE 。 如 果 你 指 定 了 这 个 值 , MFC 并不 对 这 个 字 段 进 行 检 查 。 你 必 须 自 己 调 用 SetFieldDirty 和 SetFieldNull。

这 些 选 项 在 “ V isual C++ 程 序 员 指 南 ” 的 “ DAO 记 录 集 : 动 态 记 录 绑 定 ” 一 文 中 有 进 一 步 的 解 释 。

注 意 可 以 通 过 设 置 CDa oRecordset::m_bCheckCacheForDirtyFields

来 控 制 是 否 对 数 据 使 用 双 缓 冲 机 制 。

说 明

DFX_Double 函 数 在 CDaoRecordset 对 象 的 字 段 数 据 成 员 和 数 据 源 中 记 录 的 列之 间 交 换 double 和 float 数 据 。 数 据 在 DAO 中 的 DAO_R8 类 型 和 记 录 集 中 的double 以及 float 类 型 之 间 进 行 映 射 。

示 例

参 见 DFX_Text.

请 参 阅 DFX_Text, DFX_Bool, DFX_Currency, DFX_Long, DFX_Short, DFX_Single, DFX_DateTime, DFX_Byte, DFX_Binary, DFX_LongBinary, CDaoFieldExchange::SetFieldType

DFX_Long

void AFXAPI DFX_Long( CDaoFieldExchange* pFX , LPCTSTR szNam e, long&

value , D W O R D dwBindOptions = AFX_DAO_ENABLE_FIELD_CACHE );

参 数

pFX

指 向 CDaoFieldExchange 类 的 对 象 的 指 针 。 这 个 对 象 包 含 函 数 调 用 的 环境 信 息 。 有 关 CDaoFieldExchange 对 象 能 够 指 定 的 操 作 的 附 加 信 息 参 见“ V isual C++ 程 序 员 指 南 ” 中 的 文 章 “ DAO 记 录 字 段 交 换 : DFX 如 何 工作 ” 。

szName

数 据 列 的 名 字 。

value

指 定 的 数 据 成 员 中 保 存 的 值 – – – – 要 被 传 送 的 值 。 对 于 从 记 录 集 到 数 据 源的 数 据 传 送 , 该 long 值 是 从 指 定 的 数 据 成 员 中 获 取 的 。 对 于 从 数 据 源 到记 录 集 的 数 据 传 送 , 该 值 是 保 存 在 指 定 的 数 据 成 员 中 的 。

dwBindOptions

使 你 能 够 享 受 MFC 的 双 缓 冲 机 制 的 好 处 的 选 项 , 该 机 制 能 够 检 测 发 生了 变 化 的 记 录 集 字 段 。 缺 省 值 AFX_DAO_ENABLE_FIELD_CACHE 使用 双 缓 冲 机 制 。 另 外 一 个 可 能 值 是AFX_DAO_DISABLE_FIELD_CACHE 。 如 果 你 指 定 了 这 个 值 , MFC 并不 对 这 个 字 段 进 行 检 查 。 你 必 须 自 己 调 用 SetFieldDirty 和 SetFieldNull。

这 些 选 项 在 “ V isual C++ 程 序 员 指 南 ” 的 “ DAO 记 录 集 : 动 态 记 录 绑 定 ”

一 文 中 有 进 一 步 的 解 释 。

注 意 可 以 通 过 设 置 CDa oRecordset::m_bCheckCacheForDirtyFields 来 控 制 是 否 对 数 据 使 用 双 缓 冲 机 制 。

说 明

. DFX_Long 函 数 在 CDaoRecordset 对 象 的 字 段 数 据 成 员 和 数 据 源 中 记 录 的 列 之间 交 换 长 整 型 数 据 。 数 据 在 D A O 中 的 DAO_I4 类 型 和 记 录 集 中 的 long 类 型 之间 进 行 映 射 。

示 例

参 见 DFX_Text.

请 参 阅 DFX_Text, DFX_Bool, DFX_Currency, DFX_Short, DFX_Single, DFX_Double, DFX_DateTime, DFX_Byte, DFX_Binary, DFX_LongBinary, CDaoFieldExchange::SetFieldType

DFX _ Long B inary

void AFXAPI DFX _Long Binary( CDaoFieldExchange* pFX , LPCTSTR szName , C LongBinary & value , DWORD dw PreAlloc Lenth =

AFX_DAO_ LONG BINARY_DEFAULT_SIZE, DWORD dwBindOptions = 0 );

参 数

pFX

指 向 CDaoFieldExchange 类 的 对 象 的 指 针 。 这 个 对 象 包 含 函 数 调 用 的 环境 信 息 。 有 关 CDaoFieldExchange 对 象 能 够 指 定 的 操 作 的 附 加 信 息 参 见“ V isual C++ 程 序 员 指 南 ” 中 的 文 章 “ DAO 记 录 字 段 交 换 : DFX 如 何 工作 ” 。

szName

数 据 列 的 名 字 。

value

指 定 的 数 据 成 员 中 保 存 的 值 – – – – 要 被 传 送 的 值 。 对 于 从 记 录 集 到 数 据 源的 数 据 传 送 , CLongBinary 类 型 的 值 是 从 指 定 的 数 据 成 员 中 获 取 的 。 对于 从 数 据 源 到 记 录 集 的 数 据 传 送 , 该 值 是 保 存 在 指 定 的 数 据 成 员 中 的 。

nPreAllocSize

应 用 框 架 预 分 配 这 么 多 内 存 。 如 果 你 的 数 据 更 多 , 框 架 会 在 必 要 时 分 配更 多 的 内 存 。 如 果 要 获 得 更 好 的 性 能 , 将 这 个 大 小 设 为 一 个 足 够 大 的 值以 避 免 重 分 配 。

dwBindOptions

使 你 能 够 享 受 MFC 的 双 缓 冲 机 制 的 好 处 的 选 项 , 该 机 制 能 够 检 测 发 生了 变 化 的 记 录 集 字 段 。 缺 省 值 AFX_FIELD_CACHE 并 不 使 用 双 缓 冲 机

制 , 你 必 须 自 己 调 用 SetFieldDirty 和 SetFieldNull 。 另 外 一 个 可 能 值AFX_DAO_ENABLE_FIELD_CACHE 使 用 双 缓 冲 机 制 , 不 必 进 行 额 外 的 操 作 以 将 一 个 字 段 标 记 为 脏 的 或 NULL 。 由 于 性 能 和 内 存 方 面 的 原 因 , 不 要 使 用 这 个 值 , 除 非 你 的 二 进 制 数 据 确 实 很 小 。

这 些 选 项 在 “ V isual C++ 程 序 员 指 南 ” 的 “ DAO 记 录 字 段 交 换 : 双 缓 冲记 录 ” 一 文 中 有 进 一 步 的 解 释 。

注 意 可 以 通 过 设 置 CDa oRecordset::m_bCheckCacheForDirtyFields 来 控 制 是 否 对 数 据 使 用 双 缓 冲 机 制 。

说 明

重点 我 们 推 荐 使 用 DFX_Binary 来 代 替 这 个 函 数 。 DFX_LongBinary 是为 了 与 MFC 的 ODBC 类 兼 容 而 提 供 的 。

DFX _ Long Binary 函 数 在 CDaoRecordset 对 象 的 字 段 数 据 成 员 和 数 据 源 中 记 录的 列 之 间 交 换 大 二 进 制 对 象 ( BLOB ) 数 据 。 数 据 在 DAO 中 的 DAO_BYTES 类 型 和 记 录 集 中 的 CLongBinary 类 型 之 间 进 行 映 射 。

示 例

参 见 DFX_Text.

请 参 阅 DFX_Text, DFX_Bool, DFX_Currency, DFX_Long, DFX_Short,

DFX_Single, DFX_Double, DFX_DateTime, DFX_Byte , CDaoFieldExchange::SetFieldType, CLongBinary

DFX_Short

void AFXAPI DFX_Short( CDaoFieldExchange* pFX, LPCTSTR szNam e, short&

value , D W O R D dwBindOptions = AFX_DAO_ENABLE_FIELD_CACHE );

参 数

pFX

指 向 CDaoFieldExchange 类 的 对 象 的 指 针 。 这 个 对 象 包 含 函 数 调 用 的 环境 信 息 。 有 关 CDaoFieldExchange 对 象 能 够 指 定 的 操 作 的 附 加 信 息 参 见“ V isual C++ 程 序 员 指 南 ” 中 的 文 章 “ DAO 记 录 字 段 交 换 : DFX 如 何 工作 ” 。

szName

数 据 列 的 名 字 。

value

指 定 的 数 据 成 员 中 保 存 的 值 – – – – 要 被 传 送 的 值 。 对 于 从 记 录 集 到 数 据 源的 数 据 传 送 , 该 short 值 是 从 指 定 的 数 据 成 员 中 获 取 的 。 对 于 从 数 据 源 到记 录 集 的 数 据 传 送 , 该 值 是 保 存 在 指 定 的 数 据 成 员 中 的 。

dwBindOptions

使 你 能 够 享 受 MFC 的 双 缓 冲 机 制 的 好 处 的 选 项 , 该 机 制 能 够 检 测 发 生了 变 化 的 记 录 集 字 段 。 缺 省 值 AFX_DAO_ENABLE_FIELD_CACHE 使用 双 缓 冲 机 制 。 另 外 一 个 可 能 值 是AFX_DAO_DISABLE_FIELD_CACHE 。 如 果 你 指 定 了 这 个 值 , MFC 并不 对 这 个 字 段 进 行 检 查 。 你 必 须 自 己 调 用 SetFieldDirty 和 SetFieldNull。

这 些 选 项 在 “ V isual C++ 程 序 员 指 南 ” 的 “ DAO 记 录 集 : 动 态 记 录 绑 定 ” 一 文 中 有 进 一 步 的 解 释 。

注 意 可 以 通 过 设 置 CDa oRecordset::m_bCheckCacheForDirtyFields 来 控 制 是 否 对 数 据 使 用 双 缓 冲 机 制 。

说 明

DFX_Short 函 数 在 CDaoRecordset 对 象 的 字 段 数 据 成 员 和 数 据 源 中 记 录 的 列 之间 交 换 短 整 型 数 据 。 数 据 在 DAO 中的 DAO_I2 类 型 和 记 录 集 中 的 short 类 型 之间 进 行 映 射 。

示 例

参 见 DFX_Text.

请 参 阅 DFX_Text, DFX_Bool, DFX_Currency, DFX_Long, DFX_Single,

DFX_Double, DFX_DateTime, DFX_Byte, DFX_Binary, DFX_LongBinary, CDaoFieldExchange::SetFieldType

DFX_Single

void AFXAPI DFX_Single( CDaoFieldExchange* pFX , LPCTSTR szNam e , float&

value , D W O R D dwBindOptions = AFX_DAO_ENABLE_FIELD_CACHE );

参 数

pFX

指 向 CDaoFieldExchange 类 的 对 象 的 指 针 。 这 个 对 象 包 含 函 数 调 用 的 环境 信 息 。 有 关 CDaoFieldExchange 对 象 能 够 指 定 的 操 作 的 附 加 信 息 参 见“ V isual C++ 程 序 员 指 南 ” 中 的 文 章 “ DAO 记 录 字 段 交 换 : DFX 如 何 工作 ” 。

szName

数 据 列 的 名 字 。

value

指 定 的 数 据 成 员 中 保 存 的 值 – – – – 要 被 传 送 的 值 。 对 于 从 记 录 集 到 数 据 源的 数 据 传 送 , 该 float 值 是 从 指 定 的 数 据 成 员 中 获 取 的 。 对 于 从 数 据 源 到记 录 集 的 数 据 传 送 , 该 值 是 保 存 在 指 定 的 数 据 成 员 中 的 。

dwBindOptions

使 你 能 够 享 受 MFC 的 双 缓 冲 机 制 的 好 处 的 选 项 , 该 机 制 能 够 检 测 发 生了 变 化 的 记 录 集 字 段 。 缺 省 值 AFX_DAO_ENABLE_FIELD_CACHE 使用 双 缓 冲 机 制 。 另 外 一 个 可 能 值 是AFX_DAO_DISABLE_FIELD_CACHE 。 如 果 你 指 定 了 这 个 值 , MFC 并不 对 这 个 字 段 进 行 检 查 。 你 必 须 自 己 调 用 SetFieldDirty 和 SetFieldNull。

这 些 选 项 在 “ V isual C++ 程 序 员 指 南 ” 的 “ DAO 记 录 集 : 动 态 记 录 绑 定 ” 一 文 中 有 进 一 步 的 解 释 。

注 意 可 以 通 过 设 置 CDa oRecordset::m_bCheckCacheForDirtyFields 来 控 制 是 否 对 数 据 使 用 双 缓 冲 机 制 。

说 明

DFX_Single 函 数 在 CDaoRecordset 对 象 的 字 段 数 据 成 员 和 数 据 源 中 记 录 的 列 之间 交 换 浮 点 数 据 。 数 据 在 DAO 中 的 DAO_R4 类 型 和 记 录 集 中 的 float 类 型 之 间进 行 映 射 。

示 例

参 见 DFX_Text.

请 参 阅 DFX_Text, DFX_Bool, DFX_Currency, DFX_Long, DFX_Short,

DFX_Double, DFX_DateTime, DFX_Byte, DFX_Binary, DFX_LongBinary, CDaoFieldExchange::SetFieldType

DFX_Text

void AFXAPI DFX_Text( CDaoFieldExchange* pFX , LPCTSTR szNam e, CString& value , int nPreAllocLength = AFX_DAO_TEXT_DEFAULT_SIZE, DWORD dwBindOptions = AFX_DAO_ENABLE_FIELD_CACHE );

参 数

pFX

指 向 CDaoFieldExchange 类 的 对 象 的 指 针 。 这 个 对 象 包 含 函 数 调 用 的 环境 信 息 。 有 关 CDaoFieldExchange 对 象 能 够 指 定 的 操 作 的 附 加 信 息 参 见Visual C++ 程 序 员 联 机 指 南 中 的 文 章 “ DAO 记 录 字 段 交 换 : DFX 如 何 工作 ” 。

szName

数 据 列 的 名 字 。

value

指 定 的 数 据 成 员 中 保 存 的 值 – – – – 要 被 传 送 的 值 。 对 于 从 记 录 集 到 数 据 源的 数 据 传 送 , 该 CString 值 是 从 指 定 的 数 据 成 员 中 获 取 的 。 对 于 从 数 据

源 到 记 录 集 的 数 据 传 送 , 该 值 是 保 存 在 指 定 的 数 据 成 员 中 的 。

nPreAllocSize

应 用 框 架 预 分 配 这 么 多 内 存 。 如 果 你 的 数 据 更 多 , 框 架 会 在 必 要 时 分 配更 多 的 空 间 。 如 果 要 获 得 更 好 的 性 能 , 将 这 个 大 小 设 为 一 个 足 够 大 的 值以 避 免 重 分 配 。

dwBindOptions

使 你 能 够 享 受 MFC 的 双 缓 冲 机 制 的 好 处 的 选 项 , 该 机 制 能 够 检 测 发 生了 变 化 的 记 录 集 字 段 。 缺 省 值 AFX_DAO_ENABLE_FIELD_CACHE 使用 双 缓 冲 机 制 。 另 外 一 个 可 能 值 是AFX_DAO_DISABLE_FIELD_CACHE 。 如 果 你 指 定 了 这 个 值 , MFC 并不 对 这 个 字 段 进 行 检 查 。 你 必 须 自 己 调 用 SetFieldDirty 和 SetFieldNull。

这 些 选 项 在 “ V isual C++ 程 序 员 指 南 ” 的 “ DAO 记 录 集 : 动 态 记 录 绑 定 ” 一 文 中 有 进 一 步 的 解 释 。

注 意 可 以 通 过 设 置 CDa oRecordset::m_bCheckCacheForDirtyFields 来 控 制 是 否 对 数 据 使 用 双 缓 冲 机 制 。

说 明

DFX_TEXT 函 数 在 CDaoRecordset 对 象 的 字 段 数 据 成 员 和 数 据 源 中 记 录 的 列 之间 交 换 CString 数 据 。 数 据 在 DAO 中的 DAO_CHAR ( 如 果 定 义 了 _UNICODE

则 为 DAO_WCHAR ) 与 记 录 集 中 的 CString 之 间 映 射 。

示 例

这 个 例 子 演 示 了 对 DFX_TEXT 的 一 些 调 用 。 同 时 注 意 对CDaoFieldExchange::SetFieldType 的 两 个 调 用 。 通 常 ClassWizard 把 对SetFieldType 和 相 关 DFX 的 调 用 写 入 第 二 个 调 用 。 你 必 须 编 写 第 一 个 调 用 及 其DFX 调 用 。 建 议 你 将 所 有 的 参 数 放 在 “ //{{AFX_FIELD_MAP ” 注 释 之 前 。 必须 将 参 数 写 在 注 释 之 外 。

// DFX_Text 的 例 子

void CSections::DoFieldExchange(CDaoFieldExchange* pFX)

{

pFX->SetFieldType(CDaoFieldExchange::param); DFX_Text(pFX, "Name", m_strNameParam);

//{{AFX_FIELD_MAP(CSections)

pFX->SetFieldType(CDaoFieldExchange::outputColumn); DFX_Text(pFX, "CourseID", m_strCourseID); DFX_Text(pFX, "InstructorID", m_strInstructorID); DFX_Short(pFX, "LabFee", m_nRoomNo); DFX_Text(pFX, "LabFee", m_strSchedule); DFX_Short(pFX, "SectionNo", m_nSectionNo); DFX_Currency(pFX, "LabFee", m_currLabFee);

//}}AFX_FIELD_MAP

}

请 参 阅 DFX_Bool, DFX_Long, DFX_Currency, DFX_Short, DFX_Single, DFX_Double, DFX_DateTime, DFX_Byte, DFX_Binary, DFX_LongBinary, CDaoFieldExchange::SetFieldType

D ISP_DEFVALUE

DISP_DEFVALUE( theClass , pszName ) #include <afxdisp.h>

参 数

theClass

类 的 名 字 。

pszName

代 表 了 对 象 的 值 的 属 性 的 外 部 名 。

说 明

这 个 宏 使 一 个 已 有 的 属 性 成 为 对 象 的 缺 省 值 。 使 用 缺 省 值 可 以 简 化 Visual Basic

应 用 程 序 中 的 自 动 化 对 象 的 设 计 。

对 象 的 缺 省 值 指 在 引 用 对 象 时 , 在 没 有 指 定 属 性 或 成 员 函 数 的 情 况 下 而 获 得 或设 置 的 值 。

请 参 阅 调 度 映 射 , DECLARE_DISPATCH_MAP, DISP_PROPERTY_EX, DISP_FUNCTION, BEGIN_DISPATCH_MAP, END_DISPATCH_MAP

D ISP_FUNCTION

DISP_FUNCTION( theClass, pszName, pfnMember, vtRetVal, vtsParams ) #include <afxdisp.h>

参 数

theClass

类 的 名 字 。

pszName

函 数 的 外 部 名 字 。

pfnMember

成 员 函 数 的 名 字 。

vtRetVal

指 定 了 函 数 返 回 类 型 的 值 。

vtsParams

指 定 了 函 数 参 数 表 的 一 个 或 多 个 常 量 的 用 空 格 分 隔 的 列 表 。

说 明

DISP_FUNCTION 宏 被 在 调 度 映 射 中 使 用 , 用 来 定 义 一 个 OLE 自 动 化 函 数 。

vtRetVal 参 数 属 于 VARTYPE 类 型 。这 个 参 数 的 可 能 取 值 来 自 VARENUM 枚 举 , 如 下 :

符号 返 回 类 型

VT_EMPTY void

VT_I2 short

VT_I4 long

VT_R4 float

VT_R8 double

VT_CY CY

VT_DATE DATE

VT_BSTR BSTR VT_DISPATCH LPDISPATCH VT_ERROR SCODE

VT_BOOL BOOL

VT_VARIANT VARIANT VT_UNKNOWN L P U N K N O W N

vtsParams 参 数 是 VTS_ 常 量 中 取 值 的 用 空 格 分 隔 的 列 表 。 有 空 格 分 隔 的 一 个或 多 个 取 值 的 列 表 指 定 了 函 数 的 参 数 列 表 。 例 如 :

VTS_I2 VTS_PI2

指 定 了 包 含 一 个 短 整 数 以 及 后 面 的 短 整 数 指 针 的 列 表 。

The VTS_ 常 量 及 其 含 义 如 下 :

符号 参 数 类 型

VTS_I2 short

VTS_I4 long

VTS_R4 float

VTS_R8 double

VTS_CY Const CY or CY*

VTS_DATE DATE

VTS_BSTR LPCSTR VTS_DISPATCH LPDISPATCH VTS_SCODE SCODE

VTS_BOOL B O O L

VTS_VARIANT Const VARIANT* or VARIANT& VTS_UNKNOWN L P U N K N O W N

VTS_PI2 short*

VTS_PI4 long*

VTS_PR4 float*

VTS_PR8 double*

VTS_PCY C Y *

VTS_PDATE DATE*

VTS_PBSTR BSTR* VTS_PDISPATCH LPDISPATCH* VTS_PSCODE SCODE*

VTS_PBOOL BOOL*

VTS_PVARIANT V A R IANT* VTS_PUNKNOWN LPUNKNOWN*

请 参 阅 调 度 映 射 , DECLARE_DISPATCH_MAP, DISP_PROPERTY, DISP_PROPERTY_EX, BEGIN_DISPATCH_MAP, END_DISPATCH_MAP

D ISP_PROPERTY

DISP_PROPERTY( theClass, pszName, memberName, vtPropType ) #include <afxdisp.h>

参 数

theClass

类 的 名 字 。

pszName

属 性 的 外 部 名 字 。

memberName

存 储 属 性 的 成 员 变 量 的 名 字 。

vtPropType

指 定 属 性 类 型 的 值 。

说 明

DISP_PROPERTY 用 在 调 度 映 射 中 , 用 于 定 义 一 个 OLE 自 动 化 属 性 。

vtPropType 参 数 属 于 VARTYPE 类 型 。 这 个 参 数 的 取 值 可 能 来 自 VARENUM

枚 举 :

符号 属 性 类 型

VT_I2 Short

VT_I4 long

VT_R4 float

VT_R8 double

VT_CY CY

VT_DATE DATE

VT_BSTR CString VT_DISPATCH LPDISPATCH VT_ERROR SCODE

VT_BOOL BOOL

VT_VARIANT VARIANT VT_UNKNOWN L P U N K N O W N

当 一 个 外 部 客 户 改 变 了 这 个 属 性 的 时 候 , 由 memberName 指 定 的 成 员 变 量 的 值就 发 生 了 改 变 。 对 于 这 个 改 变 , 没 有 任 何 通 知 。

请 参 阅 调 度 映 射 , DECLARE_DISPATCH_MAP, DISP_PROPERTY_EX, DISP_FUNCTION, BEGIN_DISPATCH_MAP, END_DISPATCH_MAP

D ISP_PROPERTY_EX

DISP_PROPERTY_EX( theClass, pszName, memberGet, memberSet, vtPropType ) #include <afxdisp.h>

参 数

theClass

类 的 名 字 。

pszName

属 性 的 外 部 名 字 。

memberGet

用 于 获 取 属 性 的 成 员 变 量 的 名 字 。

memberSet

用 于 设 置 属 性 的 成 员 变 量 的 名 字 。

vtPropType

指 定 属 性 类 型 的 值 。

DISP_PROPERTY_EX 用 在 调 度 映 射 中 , 用 于 定 义 一 个 OLE 自 动 化 属 性 并 命 名获 取 、 设 置 该 属 性 的 函 数 。

memberGetmemberSet 函 数 具 有 vtPropType 参 数 所 决 定 的 签 名 。 memberGet 函 数 没 有 参 数 , 它 返 回 vtPropType 指 定 的 类 型 的 值 。 memberSet 函 数 具 有 一 个vtPropType 所 指 定 的 类 型 的 参 数 , 它 没 有 返 回 值 。

vtPropType 参 数 属 于 VARTYPE 类 型 。 这 个 参 数 的 可 能 取 值 来 自 VARENUM 枚 举 。 有 关 这 些 值 的 列 表 参 见 对 DISP_FUNCTION 中 vtRetVal 参 数 的 说 明 。 注意 在 DISP_FUNCTION 中 列 出 的 VT_EMPTY 不 能 作 为 属 性 数 据 类 型 。

请 参 阅 调 度 映 射 , DECLARE_DISPATCH_MAP, DISP_PROPERTY,DISP_FUNCTION, BEGIN_DISPATCH_MAP, END_DISPATCH_MAP

D ISP_PROPERTY_NOTIFY

DISP_PROPERTY_NOTIFY ( theClass,szExternalName, memberName,pfnAfterSet,vtPropType )

#include <afxdisp.h>

theClass

类 的 名 字 。

szExternalName

属 性 的 外 部 名 字 。

memberName

保 存 属 性 的 成 员 变 量 的 名 字 。

pfnAfterSet

szExternalName 的 通 知 函 数 的 名 字 。

vtPropType

指 定 了 属 性 类 型 的 值 。

说 明

DISP_PROPERTY_NOTIFY 宏 用 在 调 度 映 射 中 , 用 来 定 义 一 个 带 通 知 的 OLE 自 动 化 属 性 。 与 用 DISP_PROPERTY 定 义 的 属 性 不 同 , 当 属 性 改 变 时 , 用DISP_PROPERTY_NOTIFY 定 义 的 属 性 自 动 地 调 用 pfnAfterSet 指 定 的 函 数 。

vtPropType 参 数 属 于 VARTYPE 类 型 。 这 个 参 数 的 可 能 取 值 来 自 VARENUM

枚 举 :

符号 属 性 类 型

VT_I2 short

VT_I4 long

VT_R4 float

VT_R8 double

VT_CY CY

VT_DATE DATE

VT_BSTR CString VT_DISPATCH LPDISPATCH VT_ERROR SCODE

VT_BOOL BOOL

VT_VARIANT VARIANT VT_UNKNOWN L P U N K N O W N

请 参 阅 调 度 映 射 , DISP_PROPERTY, DISP_FUNCTION

D ISP_PROPERTY_PARAM

DISP_PROPERTY_NOTIFY ( theClass,pszExternalName,pfnGet,pfnSet, vtPropType, vtsParam s)

#include <afxdisp.h>

参 数

theClass

类 的 名 字 。

pszExternalName

属 性 的 外 部 名 字 。

pfnGet pfnSet

用 于 获 取 属 性 的 成 员 函 数 名 。

用 于 设 置 属 性 的 成 员 函 数 名 。

vtPropType

指 定 属 性 类 型 的 值 。

vtsParams

用 空 格 分 隔 的 VTS_ 变 量 参 数 类 型 字 符 串 , 每 一 个 代 表 一 个 参 数 。

说 明

这 个 宏 定 义 了 分 别 用 Get 和 Set 成 员 函 数 访 问 的 属 性 。与 DISP_PROPERTY_EX 宏 不 同 , 这 个 宏 允 许 你 为 属 性 指 定 一 个 参 数 列 表 。 这 在 实 现 具 有 索 引 或 参 数 的属 性 时 非 常 有 用 。

例 如 , 考 虑 下 面 对 get 和 set 成 员 函 数 的 声 明 , 它 允 许 用 户 在 访 问 属 性 的 时 候 指定 行 和 列 :

afx_msg short GetArray(short row, short column);

afx_msg short SetArray(short row, short column, short nNewValue);

这 些 与 控 制 的 调 度 映 射 中 的 DISP_PROPERTY_PARAM 宏 相 对 应 :

DISP_PROPERTY_PARAM(CMyCtrl, "Array", GetArray, SetArray, VT-I2, VTS_I2 VTS_I2)

另 一 个 例 子 , 考 虑 下 面 的 get 和 set 成 员 函 数 :

LPDISPATCH CMyObject::GetItem(short index1, short index2, short index3);

void CMyObject::SetItem(short index1, short index2, short index3, LPDISPATCH newValue);

这 些 与 控 制 的 调 度 映 射 中 的 DISP_PROPERTY_PARAM 宏 相 对 应 :

DISP_PROPERTY_PARAM(CMyObject, "item", GetItem, SetItem, VT_DISPATCH,VTS_I2

™ VTS_I2 VTS_I2)

请 参 阅 调 度 映 射 , DISP_PROPERTY _EX

DumpE lements

template< class TYPE >

void AFXAPI DumpElements( CDumpContext& dc , const TYPE * pElements , int

nCount );

参 数

dc

用 于 转 储 元 素 的 环 境 。

TYPE

指 定 元 素 类 型 的 模 板 参 数 。

pElements

指 向 要 转 储 的 元 素 的 指 针 。

nCount

要 转 储 的 元 素 的 数 目 。

说 明

重 载 这 个 函 数 以 为 你 的 集 合 中 的 元 素 提 供 面 向 流 的 文 本 形 式 的 诊 断 输 出 。 如 果转 储 的 深 度 大 于 0 ,则 CArray::Dump, CList::Dump 和 CMap::Dump 都 会 调 用

缺 省 的 实 现 不 做 任 何 操 作 。 如 果 你 的 集 合 的 元 素 是 从 CObject 继 承 的 , 通 常 你的 重 载 函 数 应 当 在 集 合 的 元 素 之 间 重 复 , 按 次 序 为 每 个 元 素 调 用 Dum p 。

有 关 诊 断 和 Dump 函 数 的 信 息 参 见 “ V isual C++ 程 序 员 指 南 ” 中 的 “ MFC 调 试支 持 ” 。

请 参 阅 CDumpContext::SetDepth, CObject::Dump, CArray, CList, CMap

DYNAMIC_DOWNCAST

DYNAMIC_DOWNCAST( class, pointer )

参 数

class

类 的 名 字 。

pointer

将 要 被 强 制 转 换 为 class 类 对 象 指 针 的 指 针 。

说 明

DYNAMIC_DOWNCAST 宏 提 供 了 将 一 个 指 针 强 制 转 换 为 指 向 一 个 类 的 对 象 的

强 制 转 换 为 class 参 数 类 型 的 对 象 指 针 。

如 果 pointer 参 数 所 指 向 的 对 象 就 是 class 类 的 对 象 , 这 个 宏 将 返 回 一 个 适 当 的指 针 。 如 果 这 种 转 换 不 合 法 , 这 个 宏 将 返 回 NULL 。

请 参 阅 STATIC_DOWNCAST

END_CATCH

END_CATCH

说 明

标 记 了 上 一 个 CATCH 或 AND_CATCH 块 的 结 束 。

关 于 END_CATCH 宏 的 更 多 信 息 参 见 “ Visual C++ 程 序 员 指 南 ” 中 的 章 节 “ 异常 ” 。

请 参 阅 TRY, CATCH, AND_CATCH, THROW, THROW_LAST

END_CATCH_ALL

END_CATCH_ALL

标 记 了 上 一 个 CATCH_ALL 或 AND_CATCH_ALL 块 的 结 束 。

请 参 阅 TRY, CATCH_ALL, AND_CATCH_ALL, THROW, THROW_LAST

END_CONNECTION_MAP

END_CONNECTION_MAP( )

说 明

使 用 END_CONNECTION_MAP 宏 以 结 束 你 的 连 接 映 射 的 定 义 。

请 参 阅 BEGIN_CONNECTION_MAP, DECLARE_CONNECTION_MAP

END_CONNECTION_PART

END_CONNECTION_PART( localClass )

参 数

localClass

指 定 了 实 现 连 接 点 的 本 地 类 的 名 字 。

使 用 END_CONNECTION_PART 宏 以 结 束 你 的 连 接 点 的 定 义 。

请 参 阅 BEGIN_CONNECTION_PART, DECLARE_CONNECTION_MAP

END_DISPATCH_MAP

END_DISPATCH_MAP( )

#include <afxdisp.h>

说 明

使 用 END_DISPATCH_MAP 宏 以 结 束 你 的 调 度 映 射 的 定 义 。 它 必 须 与

BEGIN_DISPATCH_ MAP 结 合 使 用 。

请 参 阅 调 度 映 射 , DECLARE_DISPATCH_MAP, BEGIN_DISPATCH_MAP, DISP_FUNCTION, DISP_PROPERTY, DISP_PROPERTY_EX, DISP_DEFVALUE

END_EVENT_MAP

END_EVENT_MAP( )

使 用 END_EVENT_MAP 宏 以 结 束 你 的 事 件 映 射 的 定 义 。

请 参 阅 DECLARE_EVENT_MAP, BEGIN_EVENT_MAP

END_EVENTSINK_MAP

END_EVENTSINK_MAP( )

说 明

使 用 END_EVENTSINK_MAP 宏 以 结 束 你 的 事 件 接 收 映 射 的 定 义 。

请 参 阅 DECLARE_EVENTSINK_MAP, BEGIN_EVENTSINK_MAP

END_MESSAGE_MAP

END_MESSAGE_MAP( )

说 明

使 用 END_MESSAGE_MAP 宏 以 结 束 你 的 消 息 映 射 的 定 义 。

有 关 消 息 映 射 和 END_MESSAGE_MAP 宏 的 更 多 信 息 参 见 “ Visual C++ 程 序 员指 南 ” 中 的 “ 消 息 处 理 和 映 射 ” 主 题 。

请 参 阅 DECLARE_MESSAGE_MAP,BEGIN_MESSAGE_MAP, Message

M ap Function Categories

END_OLEFACTORY

END_OLEFACTORY( class_name )

参 数

class_name

类 工 厂 所 属 的 控 制 类 的 名 字 。

说 明

使 用 END_OLEFACTORY 宏 以 结 束 你 的 控 制 类 工 厂 的 定 义 。

请 参 阅 BEGIN_OLEFACTORY, DECLARE_OLECREATE_EX

END_PARSE_MAP

END_PARSE_MAP( theClass )

参 数

theClass

指 定 了 拥 有 这 个 解 析 映 射 的 类 的 名 字 。

说 明

使 用 END_PARSE_MAP 宏 来 结 束 你 的 解 析 映 射 的 定 义 。 它 必 须 与

BEGIN_PARSE_MAP 结 合 使 用 。

解 析 映 射 的 例 子 参 见 ON_PARSE_COMMAND 。

请 参 阅 BEGIN_PARSE_MAP, ON_PARSE_COMMAND, ON_PARSE_COMMAND_PARAMS,

DEFAULT_PARSE_COMMAND, CHttpServer

END_PROPPAGEIDS

END_PROPPAGEIDS( class_name )

参 数

class_name

拥 有 这 个 属 性 页 的 控 制 类 的 名 字 。

说 明

使 用 END_PROPPAGEIDS 宏 以 结 束 你 的 属 性 页 ID 列 表 的 定 义 。

请 参 阅 DECLARE_PROPPAGEIDS, BEGIN_PROPPAGEIDS

EVENT_CUSTOM

EVENT_CUSTOM( pszName, pfnFire, vtsParams )

参 数

pszName

事 件 的 名 字 。

pfnFire

事 件 引 发 的 函 数 的 名 字 。

vtsParams

用 空 格 分 隔 的 一 个 或 多 个 常 量 的 列 表 , 指 定 了 函 数 的 参 数 列 表 。

说 明

使 用 EVENT_CUSTOM 宏 来 为 一 个 自 定 义 事 件 定 义 事 件 映 射 入 口 。

vtsParams 参 数 是 来 自 VTS_ 常 量 的 值 的 列 表 , 用 空 格 分 隔 。 其 中 的 一 个 或 多 个值 指 定 了 函 数 的 参 数 列 表 。 例 如 :

VTS_COLOR VTS_FONT

指 定 了 包 含 短 整 数 以 及 后 面 的 BOOL 值 的 列 表 。

V TS_ 常 量 及 其 含 义 如 下 :

符号 参数类型

VTS_I2 short

VTS_I4 long

VTS_R4 float

VTS_R8 double

VTS_COLOR OLE_COLOR

VTS_CY CURRENCY

VTS_DATE DATE

VTS_BSTR constchar*

VTS_DISPATCH LPDISPATCH

VTS_FONT IfontDispatch*

VTS_HANDLE HANDLE

续 表

VTS_SCODE SCODE

VTS_BOOL BOOL

VTS_VARIANT constVARIANT*

VTS_PVARIANT VARIANT*

VTS_UNKNOWN LPUNKNOWN VTS_OPTEXCLUSIVE OLE_OPTEXCLUSIVE

VTS_PICTURE IpictureDisp*

VTS_TRISTATE OLE_TRISTATE VTS_XPOS_PIXELS OLE_XPOS_PIXELS VTS_YPOS_PIXELS OLE_YPOS_PIXELS VTS_XSIZE_PIXELS OLE_XSIZE_PIXELS VTS_YSIZE_PIXELS OLE_YSIZE_PIXELS

VTS_XPOS_HIMETRIC VTS_YPOS_HIMETRIC

OLE_XPOS_HIMETRIC OLE_YPOS_HIMETRIC

VTS_XSIZE_HIMETRIC OLE_XSIZE_HIMETRIC VTS_YSIZE_HIMETRIC OLE_YSIZE_HIMETRIC

注意 另 外 , 除 了 VTS_FONT 和 VTS_PICTURE 以 外 , 还 为 所 有 的 可 变类 型 定 义 了 可 变 常 量 , 提 供 了 指 向 可 变 数 据 常 量 的 指 针 。 这 些 常 量 按 照VTS_P Constantname 约 定 来 命 名 。 例 如 , VTS_PCOLOR 值 一 个 指 向VTS_COLOR 常 量 的 指 针 。

EVENT_CUSTOM_ID

EVENT_CUSTOM_ID( pszName, dispid, pfnFire, vtsParams )

参 数

pszName

事 件 的 名 字 。

dispid

当 引 发 事 件 时 由 控 制 使 用 的 调 度 ID 。

pfnFire

事 件 引 发 的 函 数 的 名 字 。

vtsParams

当 事 件 被 引 发 时 , 传 递 个 控 制 容 器 的 参 数 变 量 列 表 。

说 明

使 用 EVENT_CUSTOM_ID 宏 来 为 属 于 dispid 指 定 的 调 度 ID 的 自 定 义 事 件 定义 一 个 事 件 引 发 函 数 。

的 参 数 列 表 。 例 如 :

VTS_COLOR VTS_FONT

指 定 了 包 含 短 整 数 和 后 面 的 BOOL 量 的 列 表 。

VTS _ 常 量 的 列 表 参 见 EVENT_CUSTOM 。

请 参 阅 EVENT_CUSTOM

HashKey

template< class ARG_KEY > UINT AFXAPI HashKey( ARG_KEY key );

返 回 值

key 的 散 列 值 。

参 数

ARG_KEY

指 定 了 用 于 访 问 映 射 键 的 数 据 类 型 的 模 板 参 数 。

key

要 被 计 算 散 列 值 的 键 。

说 明

计 算 给 定 键 值 的 散 列 值 。

这 个 函 数 被 CMap::RemoveKey 直 接 调 用 , CMap::Lookup 和 CMap::Operator[]

间 接 调 用 它 。

缺 省 的 实 现 将 键 值 向 右 移 动 四 个 位 置 , 生 成 一 个 散 列 值 。 可 以 重 载 这 个 函 数 , 使 它 返 回 适 用 于 你 的 应 用 程 序 的 散 列 值 。

请 参 阅 CMap

IMPLEMENT_DYNAMIC

IMPLEMENT_DYNAMIC( class_name, base_class_name )

参 数

class_name

类 的 实 际 名 字 ( 不 用 引 号 括 起 来 ) 。

base_class_name

基 类 的 名 字 ( 不 要 引 号 括 起 来 ) 。

这 个 宏 为 动 态 的 CObject 派 生 类 生 成 了 必 要 的 C++ 代 码 , 使 其 能 够 在 运 行 时 访问 类 的 名 字 及 其 在 继 承 结 构 中 的 位 置 。 在 .CPP 模 块 中 使 用IMPLEMENT_DYNAMIC 宏 , 然 后 一 次 性 地 连 接 生 成 的 目 标 代 码 。

有 关 的 更 多 信 息 参 见 “ V isual C++ 程 序 员 指 南 ” 中 的 “ CObject 类 ” 主 题 。

请 参 阅 DECLARE_DYNAMIC, RUNTIME_CLASS, CObject::IsKindOf

IMPLEMENT_DYNCREATE

IMPLEMENT_DYNCREATE( class_name, base_class_name )

参 数

class_name

类 的 实 际 名 字 ( 不 用 引 号 括 起 来 ) 。

base_class_name

基 类 的 实 际 名 字 ( 不 用 引 号 括 起 来 ) 。

与 DECLARE_DYNCREATE 宏 一 起 使 用 IMPLEMENT_DYNCREATE 宏 , 使

CObject 的 派 生 类 的 对 象 能 够 在 运 行 时 被 动 态 创 建 。 框 架 利 用 这 种 能 力 来 动 态地 创 建 新 对 象 , 例 如 , 当 它 在 串 行 化 的 过 程 中 从 磁 盘 读 取 对 象 的 时 候 。 在 类 的实 现 文 件 中 加 入 IMPLEMENT_DYNCREATE 宏 。 更 多 的 信 息 参 见“ V isual C++ 程 序 员 指 南 ” 中 的 “ CObject 对 象 ” 主 题 。

如 果 你 使 用 了 DECLARE_DYNCREATE 和 IMPLEMENT_DYNCREATE 宏 ,

就 可 以 使 用 RUNTIME_CLASS 宏 以 及 CObject::IsKindOf 成 员 函 数 在 运 行 时 确定 对 象 所 属 的 类 。

如 果 在 类 的 声 明 中 包 含 了 DECLARE_DYNCREATE , 那 么 就 必 须 在 类 的 实 现中 包 含 IMPLEMENT_DYNCREATE 。

请 参 阅 DECLARE_DYNCREATE, RUNTIME_CLASS, CObject::IsKindOf

IMPLEMENT_OLECREATE

IMPLEMENT_OLECREATE( class_name, external_name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8 )

#include <afxdisp.h>

class_name

类 的 实 际 名 字 ( 不 用 引 号 括 起 来 ) 。

external_name

对 其 它 应 用 程 序 公 开 的 对 象 名 ( 不 用 引 号 括 起 来 ) 。

l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8

类的 CLSID 的 组 成 部 分 。

说 明

这 个 宏 必 须 出 现 在 使 用 DECLARE_OLECREATE 的 类 的 实 现 文 件 中 。

外 部 名 是 对 其 它 应 用 程 序 公 开 的 标 识 符 。 客 户 应 用 程 序 利 用 外 部 名 来 向 自 动 化服 务 器 的 类 对 象 发 出 请 求 。

OLE 的类 ID 是 对 象 的 唯 一 的 128 位 标 识 符 。它 组 成 了 一 个 long 值 ,两个 WORD 值 以 及 八 个 BYTE 值 ,在 句 法 描 述 中 用 l,w1 ,w2 以 及 b1 到 b8 来 表 示 。ClassWizard 和 AppWizard 根 据 你 的 请 求 生 成 唯 一 的 OLE 类 ID 。

请 参 阅 DECLARE_OLECREATE, CLSID Key

IMPLEMENT_OLECREATE_EX

IMPLEMENT_OLECREATE_EX( class_name, external_name, l, w1, w2, b1, b2, b3 , b4, b5, b6, b7, b8 )

参 数

class_name

属 性 页 类 控 制 的 名 字 。

external_name

对 应 用 程 序 公 开 的 对 象 名 。

l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8

类 的 CLSID 的 组 成 部 分 。 有 关 这 些 参 数 的 详 细 信 息 参 见

IMPLEMENT_OLECREATE 的 说 明 。

说 明

这 个 宏 实 现 你 的 控 制 的 类 工 厂 以 及 控 制 类 的 GetClassID 成 员 函 数 。 这 个 宏 必 须出 现 在 使 用 了 DECLARE_OLECREATE_EX 宏 或 BEGIN_OLEFACTORY 以 及

END_OLEFACTORY 的 类 的 控 制 的 实 现 文 件 中 。 外 部 名 是 对 其 它 应 用 程 序 公开 的 OLE 控 制 的 标 识 符 。 容 器 程 序 通 过 这 个 名 字 向 控 制 类 发 出 请 求 。

END_OLEFACTORY, IMPLEMENT_OLECREATE

IMPLEMENT_OLETYPELIB

IMPLEMENT_OLETYPELIB( class_name, tlid, wVerMajor, wVerMinor )

参 数

class_name

与 类 型 库 相 关 的 控 制 类 的 名 字 。

tlid

类 型 库 的 ID 数 字 。

wVerMajor

类 型 库 的 主 版 本 号 。

wVerMinor

类 型 库 的 次 版 本 号 。

说 明

这 个 宏 实 现 了 控 制 的 GetTypeLib 成 员 函 数 。 它 必 须 出 现 在 使 用

请 参 阅 DECLARE_OLETYPELIB

IMPLEMENT_SERIAL

IMPLEMENT_SERIAL( class_name, base_class_name, wSchema )

参 数

class_name

类 的 实 际 名 字 ( 不 用 引 号 括 起 来 ) 。

base_class_name

基 类 的 名 字 ( 不 用 引 号 括 起 来 ) 。

wSchema

一个 UINT 类 型 的 版 本 号 , 将 被 用 在 存 档 中 , 使 得 解 串 行 程 序 能 够 识 别并 处 理 早 期 版 本 的 程 序 所 生 成 的 数 据 。 它 的 值 不 能 是 - 1 。

说 明

这 个 宏 为 动 态 的 CObject 派 生 类 对 象 生 成 必 要 的 C++ 代 码 , 使 它 能 够 在 运 行 时访 问 类 名 及 其 在 继 承 关 系 中 的 位 置 。 在 .CPP 模 块 中 使 用 IMPLEMENT_SERIAL

你 可 以 使 用 AFX_API 来 为 使 用 了 DECLARE_SERIAL 和 IMPLEMENT_SERIAL

宏 的 类 自 动 引 出 CArchive 提 取 操 作 符 。 用 下 面 的 代 码 把 类 声 明 ( 在 .H 文 件 中 ) 括 起 来 :

#undef AFX_API

#define AFX_API AFX_EXT_CLASS

< 这 里 是 你 的 类 声 明 > #undef AFX_API #define AFX_API

有 关 的 更 多 信 息 参 见 “ V isual C++ 程 序 员 指 南 ” 中 的 “ CObject 类 ” 主 题 。

请 参 阅 DECLARE_SERIAL, RUNTIME_CLASS, CObject::IsKindOf

ISAPIASSERT

ISAPIASSERT( booleanExpression )

参 数

booleanExpression

指 定 了 一 个 表 达 式 ( 包 括 指 针 变 量 ) , 其 计 算 结 果 为 非 零 值 或 0 。

说 明

这 个 宏 的 作 用 与 MFC 宏 ASSERT 完 全 类 似 。 它 计 算 其 参 数 。 如 果 结 果 为 0 , 这 个 宏 就 打 印 出 一 条 诊 断 信 息 并 退 出 程 序 。 如 果 结 果 为 非 零 值 , 它 就 不 做 任 何操 作 。

诊 断 信 息 具 有 如 下 形 式 :

assertion failed in file <name> in line <num>

这 里 的 name 是 源 文 件 的 名 字 , 而 num 是 源 文 件 中 产 生 断 言 失 败 的 位 置 的 行 号 。

在 应 用 程 序 的 发 行 版 本 中 , ISAPIASSERT 并 不 计 算 表 达 式 , 因 此 也 不 会 中 断程 序 。 如 果 不 管 环 境 如 何 , 都 必 须 计 算 这 个 表 达 式 , 可 以 用 ISAPIVERIFY 宏来 代 替 ISAPIASSERT 。 ISAPIASSERT 仅 在 应 用 程 序 的 调 试 版 本 中 起 作 用 。

ISAPI 应 用 程 序 不 一 定 要 使 用 MFC 。 如 果 你 的 应 用 程 序 没 有 与 MFC 连 接 , ISAPIASSERT 提 供 了 与 ASSERT 相 同 的 功 能 。如 果 你 的 应 用 程 序 与 MFC 连 接 , 那 么 ISAPIASSERT 仅 简 单 地 调 用 MFC 的 ASSERT 。

请 参 阅 ISAPITRACE, ISAPITRACE0, ISAPITRACE1, ISAPITRACE2, ISAPITRACE3, ISAPIVERIFY

ISAPITRACE( exp )

参 数

exp

指 定 了 可 变 数 目 的 参 数 , 对 它 们 的 使 用 方 式 与 运 行 时 函 数 printf 中 的 可变 数 目 参 数 相 同 。

说 明

这 个 宏 的 作 用 与 MFC 宏 TRACE 完 全 相 似 , TRACE 提 供 了 与 printf 函 数 相 似的 功 能 , 向 诸 如 调 试 终 端 之 类 的 转 储 环 境 发 送 一 个 格 式 化 字 符 串 。 与 MS-DOS 下 的 C 程 序 中 的 printf 相 似 , ISAPITRACE 宏 是 在 你 的 程 序 运 行 时 跟 踪 变 量 值的 简 便 途 径 。 在 调 试 环 境 中 , ISAPITRACE 宏 的 输 出 被 送 到 V isual C++ 的 调 试窗 口 。 在 发 行 版 本 中 , 它 什 么 也 不 做 。

ISAPI 应 用 程 序 并 没 有 必 要 使 用 MFC 。 如 果 你 的 应 用 程 序 没 有 与 MFC 连 接 , ISPAITRACE 提 供 了 与 TRACE 相 同 的 功 能 。 如 果 你 的 应 用 程 序 与 MFC 进 行连 接 , 那 么 ISAPITRACE 简 单 地 调 用 MFC 的 TRACE 。

请 参 阅 ISAPIASSERT, ISAPITRACE0, ISAPITRACE1, ISAPITRACE2, ISAPITRACE3, ISAPIVERIFY

ISAPITRACE0( exp )

参 数

exp

格 式 化 字 符 串 , 与 运 行 时 函 数 printf 中 所 用 的 类 似 。

说 明

ISAPITRACE0 是 可 以 用 来 进 行 调 试 输 出 的 一 组 跟 踪 宏 中 的 一 种 形 式 。 这 组 宏包 括 ISAPITRACE0 , ISAPITRACE1 , ISAPITRACE2 和 ISAPITRACE3 。 这 些

宏 之 间 的 差 别 是 它 们 所 带 参 数 的 个 数 。 ISAPITRACE0 只 有 一 个 格 式 化 字 符 串 , 可 以 被 用 来 输 出 简 单 的 文 本 信 息 。 ISAPITRACE1 具 有 格 式 化 字 符 串 和 一 个 参数 – – – – 要 被 转 储 的 变 量 。 ISAPITRACE2 和 ISAPITRACE3 在 格 式 化 字 符 串 后 面分 别 带 有 两 个 和 三 个 参 数 。

在 你 生 成 的 应 用 程 序 的 发 行 版 本 中 ,ISAPITRACE0 什 么 也 不 做 。与 ISAPITRACE

一 样 , 它 仅 在 应 用 程 序 的 调 试 版 本 中 才 把 数 据 转 储 到 调 试 输 出 设 备 。

ISAPITRACE0 的 作 用 与 MFC 宏 TRACE0 完 全 类 似 。 ISAPI 应 用 程 序 没 有 必 要使 用 MFC 。如 果 你 的 应 用 程 序 没 有 与 MFC 连 接 ,ISAPITRACE0 提 供 与 TRACE0 相 同 的 功 能 。 如 果 你 的 应 用 程 序 与 MFC 连 接 , ISAPITRACE0 简 单 地 调 用 MFC

请 参 阅 ISAPIASSERT, ISAPITRACE, ISAPITRACE1, ISAPITRACE2, ISAPITRACE3, ISAPIVERIFY

ISAPITRACE1

ISAPITRACE1( exp, param1 )

参 数

exp

格 式 化 字 符 串 , 与 运 行 时 函 数 printf 中 所 用 的 类 似 。

param1

将 要 被 转 储 的 变 量 的 名 字 。

说 明

这 个 宏 的 作 用 与 MFC 宏 TRACE1 完 全 相 似 。 有 关 ISAPITRACE1 的 描 述 参 见

ISAPITRA C- E0 。

ISAPI 应 用 程 序 没 有 必 要 使 用 MFC 。 如 果 你 的 应 用 程 序 没 有 与 MFC 连 接 ,

ISAPITRACE1 提 供 与 TRACE1 相 同 的 功 能 。 如 果 你 的 应 用 程 序 与 MFC 连 接 ,

请 参 阅 ISAPIASSERT, ISAPITRACE, ISAPITRACE0, ISAPITRACE2, ISAPITRACE3, ISAPIVERIFY

ISAPITRACE2

ISAPITRACE2( exp, param1, param2 )

参 数

exp

格 式 化 字 符 串 , 与 运 行 时 函 数 printf 中 所 使 用 的 类 似 。

param1, param2

要 被 转 储 的 变 量 的 名 字 。

说 明

这 个 宏 的 作 用 与 MFC 宏 TRACE2 完 全 相 似 。 有 关 ISAPITRACE2 的 描 述 参 见

ISAPITRA C- E0 。

ISAPI 应 用 程 序 没 有 必 要 使 用 MFC 。 如 果 你 的 应 用 程 序 没 有 与 MFC 连 接 ,

ISAPITRACE2 提 供 与 TRACE2 相 同 的 功 能 。 如 果 你 的 应 用 程 序 与 MFC 连 接 ,

请 参 阅 ISAPIASSERT, ISAPITRACE, ISAPITRACE0, ISAPITRACE1, ISAPITRACE3, ISAPIVERIFY

ISAPITRACE3

ISAPITRACE3( exp, param1, param2, param3 )

参 数

exp

格 式 化 字 符 串 , 与 运 行 时 函 数 printf 中 所 使 用 的 类 似 。

param1, param2, param3

要 被 转 储 的 变 量 的 名 字 。

说 明

这 个 宏 的 作 用 与 MFC 宏 TRACE3 完 全 相 似 。 有 关 ISAPITRACE3 的 描 述 参 见

ISAPITRA C- E0 。

ISAPI 应 用 程 序 没 有 必 要 使 用 MFC 。 如 果 你 的 应 用 程 序 没 有 与 MFC 连 接 ,

ISAPITRACE3 提 供 与 TRACE3 相 同 的 功 能 。 如 果 你 的 应 用 程 序 与 MFC 连 接 ,

请 参 阅 ISAPIASSERT, ISAPITRACE, ISAPITRACE0, ISAPITRACE1, ISAPITRACE2, ISAPIVERIFY

ISAPIVERIFY

ISAPIVERIFY( booleanExpression )

参 数

booleanExpression

指 定 了 一 个 表 达 式 ( 包 括 指 针 变 量 ) , 将 被 计 算 , 结 果 为 非 零 值 或 0 。

说 明

这 个 宏 的 作 用 与 MFC 宏 VERIFY 完 全 相 似 。 在 应 用 程 序 的 调 试 版 本 中 , ISAPIVERIFY 宏 计 算 它 的 参 数 。 如 果 结 果 为 0 , 就 打 印 出 一 条 诊 断 信 息 并 终 止程 序 。 如 果 结 果 为 非 零 值 , 它 什 么 也 不 做 。

诊 断 信 息 具 有 如 下 形 式 :

assertion failed in file <name> in line <num>

这 里 的 name 是 源 文 件 的 名 字 , num 是 源 文 件 中 发 生 断 言 失 败 的 位 置 的 行 号 。

序 。 例 如 , 如 果 这 个 表 达 式 是 一 个 函 数 调 用 , 那 么 将 完 成 这 个 调 用 。

ISAPI 应 用 程 序 没 有 必 要 使 用 MFC 。 如 果 你 的 应 用 程 序 没 有 与 MFC 连 接 , ISAPIVERIFY 提 供 与 VERIFY 相 同 的 功 能 。 如 果 你 的 应 用 程 序 与 MFC 连 接 , ISAPIVERIFY 简 单 地 调 用 MFC 的 VERIFY 。

请 参 阅 ISAPIASSERT, ISAPITRACE, ISAPITRACE0, ISAPITRACE1, ISAPITRACE2, ISAPITRACE3

METHOD_PROLOGUE

METHOD_PROLOGUE( theClass, localClass )

参 数

theClass

指 定 了 要 实 现 接 口 映 射 的 类 的 名 字 。

localClass

指 定 了 实 现 接 口 映 射 的 本 地 类 的 名 字 。

说 明

当 调 用 一 个 引 出 接 口 的 方 法 时 , 使 用 METHOD_PROLOGUE 宏 来 维 护 正 确 的全 局 状 态 。

典 型 的 情 况 是 , CCmdTarget 派 生 类 的 对 象 所 实 现 的 接 口 的 成 员 函 数 已 经 使 用了 这 个 宏 以 对 pThis 指 针 实 现 自 动 初 始 化 。 例 如 :

class CInnerUnknown : public IUnknown

...

CInnerUnknown InnerUnknown;

...

// 内部 IUnknown 实 现

STDMETHODIMP_(ULONG) CInnerUnknown::AddRef()

{

METHOD_PROLOGUE(CCmdTarget, InnerUnknown) return pThis->InternalAddRef();

}

附 加 的 信 息 参 见 V isual C++ 联 机 文 档 中 的 “ 技 术 注 释 38 ” 以 及 “ V isual C++ 程序 员 指 南 ” 中 的 “ 创 建 新 文 档 , 窗 口 和 视 ” 一 文 中 的 “ 管 理 MFC 全 局 模 块 的状 态 数 据 ” 一 节 。

ON_COMMAND

ON_COMMAND( id, memberFxn )

参 数

id

命令 ID 。

memberFxn

命 令 被 映 射 到 的 消 息 处 理 函 数 的 名 字 。

说 明

这 个 宏 通 常 由 ClassWizard 自 动 插 入 消 息 映 射 , 也 可 以 手 动 插 入 。 它 指 明 了 将由 哪 个 函 数 来 处 理 用 户 界 面 对 象 , 如 菜 单 项 或 工 具 条 按 钮 所 发 出 的 命 令 消 息 。

当 一 个 命 令 目 标 对 象 接 收 到 了 带 有 指 定 ID 的 W indows 的 W M _ C O M M A N D 消息 时 , ON_COMMAND 将 调 用 成 员 函 数 memberFxn 来 处 理 消 息 。

用 ON_COMMAND 把 单 个 消 息 映 射 到 成 员 函 数 。 用 ON_COMMAND_RANGE 把 一 个 范 围 的 命 令 映 射 到 一 个 成 员 函 数 。 对 于 一 个 给 定 的 命 令 ID , 只 能 有 一 个消 息 映 射 入 口 。 这 就 是 说 , 不 能 将 一 个 命 令 映 射 到 多 于 一 个 的 处 理 函 数 。 相 关的 更 多 信 息 和 例 子 参 见 “ V isual C++ 程 序 员 指 南 ” 中 的 “ 消 息 处 理 和 映 射 ” 主

题 。

示 例

// ON_COMMAND 的 例 子

BEGIN_MESSAGE_MAP( CMyDoc, CDocument )

//{{AFX_MSG_MAP( CMyDoc ) ON_COMMAND( ID_MYCMD, OnMyCommand )

// ... 其 它 入 口 , 用 于 处 理 别 的 命 令

//}}AFX_MSG_MAP END_MESSAGE_MAP( )

请 参 阅 ON_UPDATE_COMMAND_UI

ON_COMMAND_RANGE

ON_COMMAND_RANGE( id1, id2, memberFxn )

参 数

id1 id2

一 个 连 续 范 围 的 命 令 ID 的 起 始 值 。

一 个 连 续 范 围 的 命 令 ID 的 结 束 值 。

memberFxn

该 命 令 被 映 射 到 的 消 息 处 理 函 数 的 名 字 。

说 明

使 用 这 个 宏 把 一 个 连 续 范 围 的 命 令 ID 映 射 到 单 个 命 令 处 理 函 数 。ID 的 范 围 从 id1

开 始 , 到 id2 结 束 。

用 ON_COMMAND_RANGE 把 一 个 范 围 的 命 令 ID 映 射 到 一 个 成 员 函 数 。 用ON_COMMAND 把 单 个 命 令 ID 映 射 到 成 员 函 数 。 每 个 给 定 的 命 令 ID 只 能 有一 个 消 息 映 射 入 口 。 这 就 是 说 , 不 能 把 命 令 映 射 到 多 于 一 个 的 处 理 函 数 。 关 于映 射 消 息 范 围 的 更 多 信 息 参 见 “ V isual C++ 程 序 员 指 南 ” 中 的 “ 消 息 映 射 范 围的 处 理 函 数 ” 。

ClassWizard 不 支 持 消 息 映 射 范 围 , 所 以 你 必 须 自 己 写 入 这 个 宏 。 确 保 你 把 它 写在 了 消 息 映 射 的 //{{AFX_MSG_MAP 分 界 符 外 面 。

请 参 阅 ON_UPDATE_COMMAND_UI_RANGE, ON_CONTROL_RANGE, ON_COMMAND

ON_CONTROL

ON_CONTROL( wNotifyCode, id, memberFxn )

参 数

wNotifyCode

控 件 的 通 知 代 码 。

id

命令 ID 。

memberFxn

命 令 被 映 射 到 的 消 息 处 理 函 数 的 名 字 。

说 明

这 个 宏 指 明 哪 个 函 数 将 处 理 自 定 义 控 件 的 通 知 消 息 。 控 件 的 通 知 消 息 是 指 控 件发 送 给 它 的 父 窗 口 的 消 息 。

对 于 每 个 要 被 映 射 到 消 息 处 理 函 数 的 控 件 通 知 消 息 , 在 消 息 映 射 中 都 必 须 有 一个 ON_CONTROL 宏 语 句 。

相 关 的 更 多 信 息 及 例 子 参 见 “ V isual C++ 程 序 员 指 南 ” 中 的 “ 消 息 处 理 和 映 射 ” 主 题 。

请 参 阅 ON_MESSAGE, ON_REGISTERED_MESSAGE

ON_CONTROL_RANGE

ON_CONTROL_RANGE( wNotifyCode, id1, id2, memberFxn )

参 数

wNotifyCode

你 的 处 理 函 数 所 响 应 的 通 知 代 码 。

id1 id2

一 个 连 续 范 围 的 控 制 ID 的 起 始 值 。一 个 连 续 范 围 的 控 制 ID 的 结 束 值 。

memberFxn

控 件 被 映 射 到 的 消 息 处 理 函 数 的 名 字 。

说 明

用 这 个 宏 把 一 个 连 续 范 围 的 控 制 ID 映 射 到 单 个 的 W indows 通 知 消 息 , 如

BN_CLICKED , 的 处 理 函 数 。 ID 的 范 围 从 id1 开 始 , 到 id2 结 束 。 这 个 处 理 函

数 是 为 从 映 射 控 件 发 出 的 特 定 通 知 而 调 用 的 。

ClassWizard 不 支 持 消 息 映 射 范 围 , 因 此 你 必 须 自 己 写 入 这 个 宏 。 确 保 你 把 它 写在 了 消 息 映 射 分 界 符 //{{AFX_MSG_MAP 的 外 面 。

请 参 阅 ON_UPDATE_COMMAND_UI_RANGE, ON_COMMAND_RANGE

ON_EVENT

ON_EVENT( theClass, id, dispid, pfnHandler, vtsParams )

参 数

theClass

事 件 接 收 映 射 所 属 的 类 。

id dispid

OLE 控 件 的 控 制 ID 。

控 件 引 发 分 事 件 的 调 度 ID 。

pfnHandler

处 理 事 件 的 成 员 函 数 的 指 针 。 这 个 函 数 具 有 BOOL 类 型 的 返 回 值 , 其 参数 的 类 型 与 事 件 的 参 数 ( 参 见 vtsParams ) 类 型 相 匹 配 。 函 数 应 当 返 回

TRUE 以 表 明 事 件 已 被 处 理 , 否 则 返 回 FALSE 。

vtsParams

VTS_ 常 量 的 序 列 , 指 定 了 事 件 参 数 的 类 型 。 这 些 值 与 诸 如

DISP_FUNCTION 之 类 的 调 度 映 射 入 口 中 使 用 的 常 量 相 同 。

说 明

用 ON_EVENT 宏 来 为 OLE 控 件 引 发 的 事 件 定 义 事 件 处 理 函 数 。

vtsParams 参 数 是 用 空 格 分 隔 的 VTS_ 常 量 的 列 表 。 用 空 格 隔 开 的 值 指 定 了 函 数的 参 数 列 表 。 例 如 :

VTS_I2 VTS_BOOL

指 定 了 一 个 包 含 短 整 数 和 后 面 的 BOOL 量 的 列 表 。

VTS _ 常 量 的 列 表 参 见 EVENT_CUSTOM 。

请 参 阅 ON_EVENT_RANGE, ON_PROPNOTIFY, ON_PROPNOTIFY_RANGE

ON_EVENT_RANGE

ON_EVENT_RANGE( theClass, idFirst, idLast, dispid, pfnHandler, vtsParams )

theClass

事 件 接 收 映 射 所 属 的 类 。

idFirst idLast dispid

范 围 中 第 一 个 OLE 控 件 的 控 制 ID 。范 围 中 最 后 一 个 OLE 控 件 的 控 制 ID 。

控 件 引 发 的 事 件 的 调 度 ID 。

pfnHandler

指 向 处 理 事 件 的 成 员 函 数 指 针 。 这 个 函 数 必 须 具 有 BOOL 类 型 的 返 回 值 , 第 一 个 参 数 的 类 型 为 UIN T ( 用 于 控 制 ID ) , 另 外 的 参 数 类 型 与 事 件 的参 数 ( 参 见 vtsParam s) 匹 配 。 这 个 函 数 应 当 返 回 TRUE 以 表 明 该 事 件已 被 处 理 , 否 则 返 回 FALSE 。

vtsParams

VTS_ 常 量 序 列 , 指 定 了 事 件 参 数 的 类 型 。 第 一 个 常 量 应 当 是 属 于 VTS_I4 类 型 的 , 用 于 控 制 ID 。 这 些 常 量 与 诸 如 DISP_FUNCTION 之 类 的 调 度 映射 入 口 中 所 使 用 的 相 同 。

使 用 ON_EVENT_RANGE 宏 来 为 一 些 OLE 控 件 所 引 发 的 事 件 定 义 一 个 事 件 处理 函 数 。 这 些 控 件 的 ID 属 于 一 个 连 续 的 范 围 。

vtsParams 参 数 是 一 个 用 空 格 分 隔 的 VTS_ 常 量 的 列 表 。 这 些 用 空 格 隔 开 的 值 指定 了 函 数 的 参 数 列 表 。 例 如 :

VTS_I2 VTS_BOOL

指 定 了 一 个 包 含 短 整 数 和 后 面 的 BOOL 量 的 列 表 。

VTS _ 常 量 的 列 表 参 见 EVENT_CUSTOM 。

请 参 阅 ON_EVENT, ON_PROPNOTIFY, ON_PROPNOTIFY_RANGE

ON_EVENT_REFLECT

ON_EVENT_REFLECT( theClass, dispid, pfnHandler, vtsParams )

参 数

theClass

事 件 接 收 映 射 所 属 的 类 。

dispid

控 件 引 发 的 事 件 的 调 度 ID 。

pfnHandler

指 向 处 理 事 件 的 成 员 函 数 的 指 针 。 这 个 函 数 必 须 具 有 BOOL 类 型 的 返 回值 , 第 一 个 参 数 的 类 型 为 UIN T ( 用 于 控 制 ID ) , 另 外 的 参 数 类 型 与 事件 的 参 数 ( 参 见 vtsParam s) 匹 配 。 这 个 函 数 应 当 返 回 TRUE 以 表 明 该事 件 已 被 处 理 , 否 则 返 回 FALSE 。

vtsParams

VTS_ 常 量 序 列 , 指 定 了 事 件 参 数 的 类 型 。 这 些 常 量 与 诸 如

DISP_FUNCTION 之 类 的 调 度 映 射 入 口 中 所 使 用 的 相 同 。

说 明

当 被 用 于 OLE 控 件 的 封 装 类 的 事 件 接 收 映 射 时 , ON_EVENT_REFLECT 宏 在控 件 的 容 器 处 理 之 前 接 收 控 件 引 发 的 事 件 。

vtsParams 参 数 是 一 个 用 空 格 分 隔 的 VTS_ 常 量 的 列 表 。 这 些 用 空 格 隔 开 的 值 指定 了 函 数 的 参 数 列 表 。 例 如 :

VTS_I2 VTS_BOOL

指 定 了 一 个 包 含 短 整 数 和 后 面 的 BOOL 量 的 列 表 。

VTS _ 常 量 的 列 表 参 见 EVENT_CUSTOM 。

请 参 阅 ON_EVENT, ON_PROPNOTIFY, ON_PROPNOTIFY_REFLECT

ON_MESSAGE

ON_MESSAGE( message, memberFxn )

参 数

message

消 息 的 ID 。

memberFxn

消 息 被 映 射 到 消 息 处 理 函 数 的 名 字 。

说 明

这 个 宏 指 明 哪 个 函 数 将 处 理 用 户 定 义 的 消 息 。 用 户 定 义 的 消 息 通 常 位 于WM_USER 和 0x7FFF 之 间 。 用 户 定 义 的 消 息 是 指 不 属 于 标 准 的 W indows WM_MESSAGE 消 息 的 任 何 消 息 。 对 于 每 个 需 要 被 映 射 到 消 息 处 理 函 数 的 用 户自 定 义 消 息 ,在 你 的 消 息 映 射 中 都 必 须 有 且 只 能 有 一 个 ON_MESSAGE 宏 语 句 。

有 关 的 更 多 信 息 和 例 子 参 见 “ V isual C++ 程 序 员 指 南 ” 中 的 “ 消 息 处 理 和 映 射 ” 主 题 。

示 例

// ON_MESSAGE 的 例 子

#define WM_MYMESSAGE (WM_USER + 1)

BEGIN_MESSAGE_MAP( CMyWnd, CMyParentWndClass )

//{{AFX_MSG_MAP( CMyWnd

ON_MESSAGE( WM_MYMESSAGE, OnMyMessage )

// ... 可 能 的 其 它 入 口 , 用 于 处 理 其 它 消 息

//}}AFX_MSG_MAP END_MESSAGE_MAP( )

请 参 阅 ON_UPDATE_COMMAND_UI, ON_CONTROL,

ON_REGISTERED_MESSAGE, ON_COMMAND, User-Defined

Handlers

ON_OLECMD

ON_OLECMD( pguid, olecmdid, id )

参 数

pguid

命 令 岁 数 的 命 令 组 的 表 示 符 。 对 于 标 准 组 使 用 NULL 。

olecmdid

OLE 命 令 的 标 识 符 。

id

发 出 命 令 的 资 源 或 对 象 的 菜 单 ID , 工 具 条 ID , 按 钮 ID 或 其 它 ID 。

说 明

这 个 宏 通 过 命 令 调 度 接 口 IOleCommandTarget 转 发 命 令 。 IOleCommandTarget 允 许 容 器 接 收 DocObject 的 用 户 所 产 生 的 命 令 ,同 时 允 许 容 器 将 相 同 的 命 令( 例如 File 菜 单 中 的 New , Open , SaveAs 以及 Print) 发 送 给 DocObject。

IOleCommandTarget 比 OLE 自 动 化 的 IDispatch 要 简 单 。 IOleCommandTarget 完 全 依 赖 于 一 个 标 准 命 令 集 , 它 们 很 少 带 参 数 , 也 不 涉 及 类 型 信 息 ( 因 而 命 令参 数 的 类 型 安 全 特 性 也 减 小 了 ) 。 如 果 你 不 需 要 调 度 带 参 数 的 命 令 , 使 用COleServerDoc::OnExecOleCm d。

IOleCommandTarget 的 标 准 菜 单 命 令 已 经 由 MFC 用 下 列 宏 实 现 了 :

ON_OLECMD_CLEARSELECTION( )

发 出 Edit Clear 命 令 , 实 现 如 下 :

ON_OLECMD(NULL, OLECMDID_CLEARSELECTION, ID_EDIT_CLEAR)

ON_OLECMD_COPY( )

发 出 Edit Copy 命 令 , 实 现 如 下 :

ON_OLECMD(NULL, OLECMDID_COPY, ID_EDIT_COPY)

ON_OLECMD_CUT( )

发 出 Edit Cut 命 令 , 实 现 如 下 :

ON_OLECMD(NULL, OLECMDID_CUT, ID_EDIT_CUT)

ON_OLECMD_NEW( )

发 出 File New 命 令 , 实 现 如 下 :

ON_OLECMD(NULL, OLECMDID_NEW, ID_FILE_NEW)

ON_OLECMD_OPEN( )

发 出 File Open 命 令 , 实 现 如 下 :

ON_OLECMD(NULL, OLECMDID_OPEN, ID_FILE_OPEN)

ON_OLECMD_PAGESETUP( )

发 出 File Page Setup 命 令 , 实 现 如 下 :

ON_OLECMD(NULL, OLECMDID_PAGESETUP, ID_FILE_PAGE_SETUP)

ON_OLECMD_PASTE( )

发 出 Edit Paste 命 令 , 实 现 如 下 :

ON_OLECMD(NULL, OLECMDID_PASTE, ID_EDIT_PASTE)

ON_OLECMD_PASTESPECIAL( )

发 出 Edit Paste Special 命 令 , 实 现 如 下 :

ON_OLECMD(NULL, OLECMDID_PASTESPECIAL, ID_EDIT_PASTE_SPECIAL)

ON_OLECMD_PRINT( )

发 出 File Print 命 令 , 实 现 如 下 :

ON_OLECMD(NULL, OLECMDID_PRINT, ID_FILE_PRINT)

ON_OLECMD_PRINTPREVIEW( )

发 出 File Print Preview 命 令 , 实 现 如 下 :

ON_OLECMD(NULL, OLECMDID_PRINTPREVIEW, ID_FILE_PRINT_PREVIEW)

ON_OLECMD_REDO( )

发 出 Edit Redo 命 令 , 实 现 如 下 :

ON_OLECMD(NULL, OLECMDID_REDO, ID_EDIT_REDO)

ON_OLECMD_SAVE( )

发 出 File Save 命 令 , 实 现 如 下 :

ON_OLECMD(NULL, OLECMDID_SAVE, ID_FILE_SAVE)

ON_OLECMD_SAVE_AS( )

发 出 File Save As 命 令 , 实 现 如 下 :

ON_OLECMD(NULL, OLECMDID_SAVEAS, ID_FILE_SAVE_AS)

ON_OLECMD_SAVE_COPY_AS( )

发 出 File Save Copy As 命 令 , 实 现 如 下 :

ON_OLECMD(NULL, OLECMDID_SAVECOPYAS, ID_FILE_SAVE_COPY_AS)

ON_OLECMD_SELECTALL( )

发 出 Edit Select All 命 令 , 实 现 如 下 :

ON_OLECMD(NULL, OLECMDID_SELECTALL, ID_EDIT_SELECT_ALL)

ON_OLECMD_UNDO( )

发 出 Edit Undo 命 令 , 实 现 如 下 :

ON_OLECMD(NULL, OLECMDID_UNDO, ID_EDIT_UNDO)

请 参 阅 COleCmdUI, COleServerDoc::OnExecOleCmd

ON_OLEVERB

ON_OLEVERB( idsVerbName, memberFxn )

参 数

idsVerbName

动 词 名 字 的 字 符 串 资 源 ID 。

memberFxn

当 动 词 被 激 活 时 框 架 调 用 的 函 数 。

说 明

这 个 宏 定 义 了 一 个 消 息 映 射 入 口 , 将 一 个 自 定 义 的 动 词 映 射 到 控 件 的 指 定 成 员函 数 。

可 用 资 源 编 辑 器 来 生 成 自 定 义 动 词 名 字 , 加 入 字 符 串 表 。

memberFxn 的 函 数 原 型 如 下 :

BOOL memberFxn( LPMSG lpMsg , HWND hWndParen t, LPCRECT lpRect );

lpMsg , hWndParentlpRect 参 数 的 值 时 从 IO leObject::DoVerb 成 员 函 数 的 对应 参 数 中 取 得 的 。

请 参 阅 ON_STDOLEVERB

ON_PARSE_COMMAND

ON_PARSE_COMMAND( FnName, mapClass, Args )

参 数

FnName

成 员 函 数 的 名 字 。 也 是 命 令 的 名 字 。

mapClass

要 把 函 数 映 射 到 的 类 的 名 字 。

Args

映 射 到 FnName 的 参 数 。 符 号 的 列 表 参 见 说 明 部 分 。

说 明

ON_PARSE_COMMAND 宏 被 用 于 解 析 映 射 , 用 来 定 义 从 客 户 发 送 到

CHttpServer 对 象 的 命 令 。

FnName 表 示 的 成 员 函 数 必 须 以 一 个 指 向 CHttpServerContext 对 象 的 指 针 作 为它 的 第 一 个 参 数 。 FnName 属 于 LPSTR 类 型 , 用 解 析 映 射 中 的 符 号 ITS_LPSTR 来 标 识 , 这 意 味 着 , FnName 指 向 一 个 包 含 了 mapClass 类 的 成 员 函 数 名 的 字 符串 。

参 数 Args 可 以 取 下 列 值 之 一 :

符号 类 型 或 注 释

ITS_EMPTY Args 不 能 为 空 白 。如 果 你 没 有 参 数 ,则 使 用 ITS_EMPTY ITS_PSTR 字 符 串 指 针

ITS_RAW 精 确 的 行 数 据 发 送 到 ISAPI 扩 展 , 不 要 使 用 具 有 任 何其 它 参 数 类 型 的 ITS _RAW ; 若 使 用 了 , 则 导 致ASSERT 。 参 见 “ R emark s” 中 的 示 例

ITS_I2 一 个 short 值

ITS_I4 一 个 long 值

ITS_R4 一 个 float 值

ITS_R8 一 个 double 值

示 例

/ / T he following example Illustrates extracting

/ / a string and a short sent to the server: BEGIN_PARSE_MAP(CDerivedClass, CHttpServer)

DEFAULT_PARSE_COMMAND(Myfunc, CDerivedClass) ON_PARSE_COMMAND(Myfunc, CDerivedClass, ITS_PSTR ITS_I2) ON_PARSE_COMMAND_PARAMS("string integer=42") ON_PARSE_COMMAND(Myfunc2, CDerivedClass, ITS_PSTR ITS_I2

ITS_PSTR)

ON_PARSE_COMMAND_PARAMS("string integer string2='Default value'")

END_PARSE_MAP(CDerivedClass)

注 意 如 果 你 在 可 选 的 ITS_PSTR 的 缺 省 值 中 加 入 空 格 , 使 用 单 引 号 。

void Myfunc(CHttpServerContext* pCtxt, LPTSTR pszName, int nNumber);

void Myfunc2(CHttpServerContext* pCtxt, LPTSTR pszName, int nNumber, LPTSTR pszTitle);

// 下 面 的 例 子 演 示 了 提 取 发 送 给 服 务 器 的 原 始 数 据

BEGIN_PARSE_MAP(CDerivedClass, CHttpServer) DEFAULT_PARSE_COMMAND(MyFunc, CDerivedClass) ON_PARSE_COMMAND(Myfunc, CDerivedClass, ITS_RAW)

END_PARSE_MAP(CDerivedClass)

函 数 原 型 如 下 :

void CDerivedClass::Myfunc(CHttpServerContext* pCtxt, void* pVoid, DWORD dwBytes);

在 第 二 个 例 子 中 , pVoid 指 针 指 向 发 送 给 你 的 扩 展 部 分 的 数 据 。 dwBytes 参 数是 pVoid 所 指 向 的 字 节 数 目 。 如 果 dwBytes 为 零 , pVoid 可 能 不 指 向 任 何 内 容 。

注意 解 析 映 射 命 令 的 处 理 函 数 必 须 以 指 向 CHttpServerContext 对 象 的指 针 为 第 一 个 参 数 , 参 数 必 须 按 照 与 ON_PARSE_COMMAND 中 相 同 的 顺 序 定义 。

请 参 阅 BEGIN_PARSE_MAP, END_PARSE_MAP, ON_PARSE_COMMAND_PARAMS, DEFAULT_PARSE_COMMAND,

CHttpServer

ON_PARSE_COMMAND_PARAMS

ON_PARSE_COMMAND_PARAMS( Params )

参 数

Params

参 数 , 映 射 到 Args 参 数 , 并 与 FnName 所 标 识 的 函 数 相 关 , 在

ON_PARSE_COMMAND 宏 中 , 位 于 ON_PARSE_COMMAND_PARAMS

之 前 。

说 明

ON_PARSE_COMMAND_PARAMS 宏 标 识 并 指 定 了 参 数 的 缺 省 值 , 该 参 数 与一 个 函 数 相 关 , 这 个 函 数 被 映 射 到 一 个 由 客 户 发 往 CHttpSever 对 象 的 命 令 。ON_PARSE_COMM - AND_PARAMS 宏 必 须 紧 跟 在 与 之 相 关 的ON_PARSE_COMMAND 宏 之 后 。

如 果 参 数 被 命 名 , 客 户 在 请 求 的 时 候 必 须 提 供 参 数 的 名 字 。 例 如 , 如 果 你 的 参数 如 下 :

ON_PARSE_COMMAND_PARAMS("string int=42")

那 么 客 户 必 须 提 供 参 数 字 符 串 , 否 则 查 询 就 会 失 败 。

如 果 参 数 是 可 选 的 , 客 户 不 必 提 供 它 , 解 析 映 射 将 会 提 供 缺 省 值 。 例 如 , 如 果你 的 参 数 如 下 :

ON_PARSE_COMMAND_PARAMS("string=default int=42")

那 么 客 户 的 查 询 中 不 必 定 义 任 何 参 数 , 缺 省 的 参 数 字 符 串 是 一 个 空 字 符 串 。解 析 映 射 的 例 子 参 见 ON_PARSE_COMMAND 。

请 参 阅 BEGIN_PARSE_MAP, END_PARSE_MAP, ON_PARSE_COMMAND,

DEFAULT_PARSE_COMMAND, CHttpServer

ON_PROPNOTIFY

ON_PROPNOTIFY( theClass, id, dispid, pfnRequest, pfnChanged )

参 数

theClass

id dispid

事 件 接 收 映 射 所 属 的 类 。

OLE 控 件 的 控 制 ID 。

与 通 知 有 关 的 属 性 的 调 度 ID 。

pfnRequest

指 向 一 个 成 员 函 数 的 指 针 , 该 函 数 处 理 属 性 的 OnRequestEdit 通 知 。 这个 函 数 必 须 具 有 BOOL 类 型 的 返 回 值 和 BOOL* 类 型 的 参 数 。 它 应 当 将参 数 设 为 TRUE 以 允 许 改 变 属 性 , 或 者 设 为 FALSE 以 禁 止 改 变 属 性 。这 个 函 数 应 当 返 回 TRUE 以 表 明 它 已 经 处 理 了 通 知 , 否 则 返 回 FALSE 。

pfnChanged

指 向 一 个 成 员 函 数 的 指 针 , 该 函 数 处 理 属 性 的 OnChanged 通 知 。 函 数 应当 具 有 BOOL 类 型 的 返 回 值 和 一 个 UINT 类 型 的 参 数 。 这 个 函 数 必 须 返回 TRUE 以 表 明 它 已 经 处 理 了 通 知 , 否 则 返 回 FALSE 。

说 明

用 ON_PROPNOTIFY 宏 来 定 义 一 个 事 件 接 收 映 射 入 口 以 处 理 OLE 控 件 发 出 的属 性 通 知 。

vtsParams 参 数 是 一 个 用 空 格 分 隔 的 VTS_ 常 量 的 列 表 。 这 些 用 空 格 隔 开 的 值 指

定 了 函 数 的 参 数 列 表 。 例 如 :

VTS_I2 VTS_BOOL

指 定 了 包 含 短 整 数 和 后 面 的 BOOL 量 的 列 表 。

VTS _ 常 量 的 列 表 参 见 EVENT_CUSTOM 。

请 参 阅 ON_EVENT_RANGE, ON_PROPNOTIFY_RANGE

ON_PROPNOTIFY_RANGE

ON_PROPNOTIFY_RANGE( theClass, idFirst, idLast, dispid, pfnRequest, pfnChanged )

参 数

theClass

事 件 接 收 映 射 所 属 的 类 。

idFirst idLast

范 围 中 第 一 个 OLE 控 件 的 控 制 ID 。范 围 中 最 后 一 个 OLE 控 件 的 控 制 ID 。

dispid

与 通 知 有 关 的 属 性 的 调 度 ID 。

pfnRequest

指 向 一 个 成 员 函 数 的 指 针 , 该 函 数 处 理 属 性 的 OnRequestEdit 通 知 。 这个 函 数 必 须 具 有 BOOL 类 型 的 返 回 值 和 UINT 以 及 BOOL* 类 型 的 参 数 。它 应 当 将 参 数 设 为 TRUE 以 允 许 改 变 属 性 , 或 者 设 为 FALSE 以 禁 止 改变 属 性 。 这 个 函 数 应 当 返 回 TRUE 以 表 明 它 已 经 处 理 了 通 知 , 否 则 返 回FALSE 。

pfnChanged

指 向 一 个 成 员 函 数 的 指 针 , 该 函 数 处 理 属 性 的 OnChanged 通 知 。 这 个 函数 必 须 具 有 BOOL 型 返 回 值 以 及 一 个 UINT 参 数 。该 函 数 必 须 返 回 TRUE 以 表 明 通 知 已 经 被 处 理 , 否 则 返 回 FALSE 。

说 明

使 用 ON_PROPNOTIFY_RANGE 宏 来 定 义 一 个 事 件 接 收 映 射 , 用 以 处 理 OLE

控 件 发 出 的 属 性 通 知 , 这 些 控 件 的 ID 属 于 一 个 连 续 的 范 围 。

请 参 阅 ON_EVENT_RANGE, ON_PROPNOTIFY, ON_EVENT

ON_PROPNOTIFY_REFLECT

ON_PROPNOTIFY_REFLECT( theClass, dispid, pfnRequest, pfnChanged )

参 数

theClass

事 件 接 收 映 射 所 属 的 类 。

dispid

与 通 知 有 关 的 属 性 的 调 度 ID 。

pfnRequest

指 向 一 个 成 员 函 数 的 指 针 , 该 函 数 处 理 属 性 的 OnRequestEdit 通 知 。 这个 函 数 必 须 具 有 BOOL 类 型 的 返 回 值 和 BOOL* 型 参 数 。 这 个 函 数 应 当将 参 数 设 为 TRUE 以 允 许 改 变 属 性 , 或 者 设 为 FALSE 以 禁 止 改 变 属 性 。函 数 应 该 返 回 TRUE 以 表 明 通 知 已 经 被 处 理 , 否 则 就 返 回 FALSE 。

pfnChanged

指 向 一 个 成 员 函 数 的 指 针 , 该 函 数 处 理 属 性 的 OnChanged 通 知 。 这 个 函数 必 须 具 有 BOOL 类 型 的 返 回 值 , 不 能 有 参 数 。 函 数 应 该 返 回 TRUE 以表 明 通 知 已 经 被 处 理 , 否 则 就 返 回 FALSE 。

说 明

当 ON_PROPNOTIFY_REFLECT 宏 被 用 于 OLE 控 件 的 封 装 类 的 事 件 接 收 映 射时 , 它 在 控 件 发 出 的 属 性 通 知 被 控 件 容 器 处 理 之 前 接 收 它 们 。

请 参 阅 ON_EVENT_REFLECT, ON_PROPNOTIFY

ON_REGISTERED_MESSAGE

ON_REGISTERED_MESSAGE( nMessageVariable, memberFxn )

参 数

nMessageVariable

注 册 的 窗 口 消 息 ID 变 量 。

memberFxn

消 息 被 映 射 到 的 消 息 处 理 函 数 的 名 字 。

说 明

W indows 的 RegisterWindowMessage 函 数 可 被 用 来 定 义 一 个 新 的 窗 口 消 息 , 这个 消 息 在 系 统 内 应 当 是 唯 一 的 。 这 个 消 息 指 明 由 哪 个 函 数 来 处 理 注 册 的 消 息 。

有 关 的 更 多 信 息 和 例 子 参 见 “ V isual C++ 程 序 员 指 南 ” 中 的 “ 消 息 处 理 和 映 射 ” 主 题 。

示 例

// ON_REGISTERED_MESSAGE 的 例 子

const UINT wm_Find = RegisterWindowMessage( FINDMSGSTRING ) BEGIN_MESSAGE_MAP( CMyWnd, CMyParentWndClass )

//{{AFX_MSG_MAP( CMyWnd )

ON_REGISTERED_MESSAGE( wm_Find, OnFind )

// ... 可 能 的 入 口 , 用 于 处 理 其 它 消 息 。

//}}AFX_MSG_MAP END_MESSAGE_MAP( )

请 参 阅 ON_MESSAGE, ON_UPDATE_COMMAND_UI, ON_CONTROL,

ON_COMMAND, ::RegisterWindowMessage, User-Defined Handlers

ON_REGISTERED_THREAD_MESSAGE

ON_REGISTERED_THREAD_MESSAGE( nMessageVariable, memberFxn )

nMessageVariable

注 册 的 窗 口 消 息 ID 变 量 。

memberFxn

消 息 被 映 射 到 的 C W inThread 消 息 处 理 函 数 的 名 字 。

说 明

这 个 宏 指 明 由 哪 个 函 数 来 处 理 W indows 的 RegisterWindowMessage 函 数 注 册 的消 息 。 RegisterWindowMessage 函 数 被 用 于 定 义 一 个 新 的 窗 口 消 息 , 在 整 个 系

统 中 , 该 消 息 是 唯 一 的 。 当 使 用

C W inThread

类 的 时 候 , 必 须

ON_REGISTERED_THREAD_MESSAGE

ON_REGISTERED_MESSAG E。

请 参 阅 ON_REGISTERED_MESSAGE,

ON_THREAD_MESSAGE, ::RegisterWindowMessage, CWinThread

ON_STDOLEVERB

ON_STDOLEVERB( iVerb, memberFxn )

iVerb

被 覆 盖 的 动 词 的 标 准 动 词 索 引 。

memberFxn

当 动 词 被 激 活 时 由 框 架 调 用 的 函 数 。

说 明

利 用 这 个 宏 来 改 变 标 准 动 词 的 缺 省 动 作 。

标 准 动 词 索 引 的 形 式 如 OLEIVERB_ , 后 面 跟 一 个 动 作 。 例 如 ,

OLEIVERB_SHOW , OLEIVERB_HIDE 和 OLEIVERB_UIACTIVATE 等 标 准

动 词 的 例 子 。

对 可 以 用 作 memberFxn 参 数 的 函 数 原 型 的 描 述 参 见 ON_OLEVERB 。

请 参 阅 ON_OLEVERB

ON_THREAD_MESSAGE

ON_THREAD_MESSAGE( message, memberFxn )

message

消 息 的 ID 。

memberFxn

消 息 被 映 射 到 的 C W inThread 消 息 处 理 函 数 的 名 字 。

说 明

这 个 宏 指 明 由 哪 个 函 数 来 处 理 用 户 定 义 的 消 息 。 当 使 用 C W inThread 类 的 时 候 , 必 须 用 ON_THREAD_MESSAGE 来 代 替 ON_MESSAGE 。 用 户 定 义 的 消 息 是指 那 些 不 属 于 标 准 的 W indows WM_MESSAGE 的 消 息 。 对 于 每 一 个 要 映 射 到消 息 处 理 函 数 的 用 户 定 义 函 数 , 在 消 息 映 射 中 必 须 有 且 只 能 有 一 个ON_THREAD_MESSAGE 宏 语 句 。

请 参 阅 ON_MESSAGE, ON_REGISTERED_THREAD_MESSAGE,

C W inThread

ON_UPDATE_COMMAND_UI

ON_UPDATE_COMMAND_UI( id, memberFxn )

id

消 息 的 ID 。

memberFxn

消 息 被 映 射 到 的 消 息 处 理 函 数 的 名 字 。

说 明

这 个 宏 通 常 由 ClassWizard 插 入 消 息 映 射 , 用 于 指 明 由 哪 个 函 数 处 理 用 户 界 面的 更 新 消 息 。

对 于 每 个 要 映 射 到 消 息 处 理 函 数 的 用 户 界 面 更 新 命 令 , 在 消 息 映 射 中 必 须 有 且只 能 有 一 个 ON_UPDATE_COMMAND_UI 宏 语 句 。

相 关 的 信 息 和 例 子 参 见 “ V isual C++ 程 序 员 指 南 ” 中 的 “ 消 息 处 理 和 映 射 ” 主题 。

请 参 阅 ON_MESSAGE, ON_REGISTERED_MESSAGE, ON_CONTROL, ON_COMMAND, CCmdUI

ON_UPDATE_COMMAND_UI_RANGE

ON_UPDATE_COMMAND_UI_RANGE( id1, id2, memberFxn )

id1 id2

  • 个 连 续 的 命 令 ID 范 围 的 起 始 ID 。

  • 个 连 续 的 命 令 ID 范 围 的 结 束 ID 。

memberFxn

命 令 被 映 射 到 的 更 新 消 息 处 理 函 数 的 名 字 。

说 明

使 用 这 个 宏 将 一 个 连 续 范 围 的 命 令 ID 映 射 到 一 个 更 新 消 息 处 理 函 数 。 更 新 消息 处 理 函 数 更 新 与 命 令 相 关 的 菜 单 项 和 工 具 条 按 钮 的 状 态 。 ID 的 范 围 从 id1 开始 , 到 id2 结 束 。

ClassWizard 不 支 持 消 息 映 射 范 围 , 因 此 你 必 须 自 己 加 入 这 个 宏 。 确 保 你 把 它 写在 了 消 息 映 射 的 分 界 符 //{{AFX_MSG_MAP 的 外 面 。

请 参 阅 ON_COMMAND_RANGE, ON_CONTROL_RANGE

PROPPAGEID

PROPPAGEID( clsid )

clsid

属 性 页 的 唯 一 的 类 ID 。

说 明

使 用 这 个 宏 加 入 一 个 OLE 控 件 使 用 的 属 性 页 。 所 有 的 PROPPAGEID 宏 都 必 须放 在 你 的 控 件 的 实 现 文 件 中 , 位 于 BEGIN_PROPPAGEIDS 和END_PROPPAGEIDS 宏 之 间 。

请 参 阅 BEGIN_PROPPAGEIDS, END_PROPPAGEIDS

PX_Blob

BOOL PX_Blob( CPropExchange* pPX , LPCTSTR pszPropNam e, HGLOBAL&

hBlob , HGLOBAL hBlobDefault = NULL );

返 回 值

如 果 成 功 地 交 换 了 数 据 则 为 非 零 值 , 否 则 为 0 。

pPX

指向 CPropExchange 对 象 的 指 针 ( 通 常 用 作 传 递 给 DoPropExchange 的 参数 ) 。

pszPropName

要 交 换 的 属 性 的 名 字 。

hBlob

对 存 储 属 性 的 变 量 ( 通 常 是 你 的 类 的 成 员 变 量 ) 的 引 用 。

hBlobDefault

属 性 的 缺 省 值 。

说 明

在 你 的 控 件 的 DoPropExchange 成 员 函 数 内 调 用 这 个 函 数 , 用 以 串 行 化 或 初 始化 一 个 存 储 二 进 制 大 对 象 ( BLOB ) 数 据 的 属 性 。 属 性 的 值 将 从 hBlob 引 用 的变 量 中 读 写 。 这 个 变 量 在 最 初 调 用 PX_Blob 之 前 必 须 被 初 始 化 为 NULL ( 通 常这 可 以 在 控 件 的 构 造 函 数 中 完 成 ) 。 如 果 指 定 了 hBlobDefault , 它 将 被 用 作 该属 性 的 缺 省 值 。 如 果 由 于 某 种 原 因 , 控 件 的 初 始 化 或 串 行 化 过 程 失 败 了 , 就 会使 用 这 个 缺 省 值 。

句 柄 hBlobhBlobDefault 指 向 一 个 内 存 块 , 其 中 包 含 如 下 内 容 :

  • 包 含 了 后 面 的 二 进 制 数 据 的 长 度( 以 字 节 为 单 位 ) 的

    DWORD 值 , 后 面 是 :

  • 包 含 了 实 际 的 二 进 制 数 据 的 内 存 块 。

注 意 当 载 入 BLOB 类 型 的 属 性 时 , PX_Blob 会 使 用 W indows 的 API 函 数G lobalAlloc 来 分 配 内 存 。 你 应 该 负 责 释 放 内 存 。 因 此 , 你 的 控 件 的 析 构 函 数 必须 对 BLOB 类 型 的 属 性 句 柄 调 用 GlobalFree 以 释 放 为 控 件 分 配 的 内 存 。

请 参 阅 COleControl::DoPropExchange

PX_Bool

BOOL PX_Bool( CPropExchange* pPX , LPCTSTR pszPropNam e, BOOL&

bValue );

BOOL PX_Bool( CPropExchange* pPX , LPCTSTR pszPropNam e, BOOL& bValue , BOOL bDefault );

返 回 值

如 果 成 功 地 交 换 了 数 据 , 则 返 回 非 零 值 ; 否 则 返 回 0 。

参 数

pPX

指 向 CPropExchange 对 象 的 指 针 ( 通 常 作 为 参 数 传 递 给

DoPropExchange )。

pszPropName

将 要 交 换 的 属 性 的 名 字 。

bValue

对 保 存 属 性 的 变 量 的 引 用 ( 通 常 是 你 的 类 的 成 员 变 量 ) 。

bDefault

属 性 的 缺 省 值 。

说 明

在 你 的 控 件 的 DoPropExchange 成 员 函 数 内 调 用 这 个 函 数 , 用 以 串 行 化 或 初 始化 一 个 BOOL 类 型 的 属 性 。 属 性 的 值 将 从 bValue 引 用 的 变 量 中 读 写 。 如 果 指定 了 bDefault , 它 将 被 用 作 该 属 性 的 缺 省 值 。 如 果 由 于 某 种 原 因 , 控 件 的 串 行化 过 程 失 败 了 , 就 会 使 用 这 个 缺 省 值 。

请 参 阅 COleControl::DoPropExchange

PX_Color

BOOL PX_Color( CPropExchange* pPX , LPCTSTR pszPropNam e, OLE_COLOR&

clrValue );

BOOL PX_Color( CPropExchange* pPX , LPCTSTR pszPropNam e, OLE_COLOR&

clrValue , OLE_COLOR clrDefault );

返 回 值

如 果 成 功 地 交 换 了 数 据 , 则 返 回 非 零 值 ; 否 则 返 回 0 。

参 数

pPX

指 向 CPropExchange 对 象 的 指 针 ( 通 常 作 为 参 数 传 递 给

DoPropExchange )。

pszPropName

将 要 交 换 的 属 性 的 名 字 。

clr Value

对 保 存 属 性 的 变 量 的 引 用 ( 通 常 是 你 的 类 的 成 员 变 量 ) 。

clr Default

属 性 的 缺 省 值 。

说 明

在 你 的 控 件 的 DoPropExchange 成 员 函 数 内 调 用 这 个 函 数 , 用 以 串 行 化 或 初 始化 一 个 OLE_COLOR 类 型 的 属 性 。 属 性 的 值 将 从 clrValue 引 用 的 变 量 中 读 写 。如 果 指 定 了 clrDefault , 它 将 被 用 作 该 属 性 的 缺 省 值 。 如 果 由 于 某 种 原 因 , 控 件的 串 行 化 过 程 失 败 了 , 就 会 使 用 这 个 缺 省 值 。

请 参 阅 COleControl::DoPropExchange

PX_Currency

BOOL PX_Currency( CPropExchange* pPX , LPCTSTR pszPropNam e, CY&

cyValue );

BOOL PX_Currency( CPropExchange* pPX , LPCTSTR pszPropNam e, CY&

cyValue , CY cyDefault );

返 回 值

如 果 成 功 地 交 换 了 数 据 , 则 返 回 非 零 值 ; 否 则 返 回 0 。

参 数

pPX

指 向 CPropExchange 对 象 的 指 针 ( 通 常 作 为 参 数 传 递 给

DoPropExchange )。

pszPropName

将 要 交 换 的 属 性 的 名 字 。

cy Value

对 保 存 属 性 的 变 量 的 引 用 ( 通 常 是 你 的 类 的 成 员 变 量 ) 。

cy Default

属 性 的 缺 省 值 。

说 明

在 你 的 控 件 的 DoPropExchange 成 员 函 数 内 调 用 这 个 函 数 , 用 以 串 行 化 或 初 始化 一 个 currency 类 型 的 属 性 。 属 性 的 值 将 从 cyValue 引 用 的 变 量 中 读 写 。 如 果指 定 了 cyDefault , 它 将 被 用 作 该 属 性 的 缺 省 值 。 如 果 由 于 某 种 原 因 , 控 件 的 串行 化 过 程 失 败 了 , 就 会 使 用 这 个 缺 省 值 。

请 参 阅 COleControl::DoPropExchange

PX_DataPath

BOOL PX_DataPath( CPropExchange* pPX , LPCTSTR pszPropNam e,

CDataPathProperty& dataPathProperty );

BOOL PX_DataPath( CPropExchange* pPXe , CDataPathProperty&

dataPathProperty );

返 回 值

如 果 成 功 地 交 换 了 数 据 , 则 返 回 非 零 值 ; 否 则 返 回 0 。

参 数

pPX

指 向 CPropExchange 对 象 的 指 针 ( 通 常 作 为 参 数 传 递 给

DoPropExchange )。

pszPropName

将 要 交 换 的 属 性 的 名 字 。

dataPathProperty

对 保 存 属 性 的 变 量 的 引 用 ( 通 常 是 你 的 类 的 成 员 变 量 ) 。

说 明

在 你 的 控 件 的 DoPropExchange 成 员 函 数 内 部 调 用 这 个 函 数 以 串 行 化 或 初 始 化一 个 CDataPathProperty 类 型 的 日 期 路 径 属 性 。 日 期 路 径 属 性 实 现 了 异 步 的 控 件

属 性 。 属 性 的 值 将 从 dataPathProperty 所 引 用 的 变 量 中 读 写 。

请 参 阅 COleControl::DoPropExchange, CDataPathProperty

PX_Double

BOOL PX_Double( CPropExchange* pPX , LPCTSTR pszPropNam e, double&

doubleValue );

BOOL PX_Double( CPropExchange* pPX , LPCTSTR pszPropNam e, double&

doubleValue , double doubleDefault );

返 回 值

如 果 成 功 地 交 换 了 数 据 , 则 返 回 非 零 值 ; 否 则 返 回 0 。

参 数

pPX

指 向 CPropExchange 对 象 的 指 针 ( 通 常 作 为 参 数 传 递 给

DoPropExchange )。

pszPropName

将 要 交 换 的 属 性 的 名 字 。

double Value

对 保 存 属 性 的 变 量 的 引 用 ( 通 常 是 你 的 类 的 成 员 变 量 ) 。

double Default

属 性 的 缺 省 值 。

说 明

在 你 的 控 件 的 DoPropExchange 成 员 函 数 内 调 用 这 个 函 数 , 用 以 串 行 化 或 初 始化 一 个 double 类 型 的 属 性 。 属 性 的 值 将 从 doubleValue 引 用 的 变 量 中 读 写 。 如果 指 定 了 doubleDefault , 它 将 被 用 作 该 属 性 的 缺 省 值 。 如 果 由 于 某 种 原 因 , 控件 的 串 行 化 过 程 失 败 了 , 就 会 使 用 这 个 缺 省 值 。

请 参 阅 COleControl::DoPropExchange, PX_Float, PX_Short

PX_Float

BOOL PX_Float( CPropExchange* pPX , LPCTSTR pszPropNam e, float&

floatValue );

BOOL PX_Float( CPropExchange* pPX , LPCTSTR pszPropNam e, float&

floatValue , float floatDefault );

返 回 值

如 果 成 功 地 交 换 了 数 据 , 则 返 回 非 零 值 ; 否 则 返 回 0 。

参 数

pPX

指 向 CPropExchange 对 象 的 指 针 ( 通 常 作 为 参 数 传 递 给

DoPropExchange )。

pszPropName

将 要 交 换 的 属 性 的 名 字 。

floatValue

对 保 存 属 性 的 变 量 的 引 用 ( 通 常 是 你 的 类 的 成 员 变 量 ) 。

floatDefault

属 性 的 缺 省 值 。

说 明

在 你 的 控 件 的 DoPropExchange 成 员 函 数 内 调 用 这 个 函 数 , 用 以 串 行 化 或 初 始化 一 个 float 类 型 的 属 性 。 属 性 的 值 将 从 floatValue 引 用 的 变 量 中 读 写 。 如 果 指定 了 floatDefault , 它 将 被 用 作 该 属 性 的 缺 省 值 。 如 果 由 于 某 种 原 因 , 控 件 的 串

行 化 过 程 失 败 了 , 就 会 使 用 这 个 缺 省 值 。

请 参 阅 COleControl::DoPropExchange, PX_Double, PX_String

PX_Font

BOOL PX_Font( CPropExchange* pPX , LPCTSTR pszPropNam e, CFontHolder& fon t, const FONTDESC FAR* pFontDesc = NULL, LPFONTDISP pFontDispAmbient = NULL );

返 回 值

如 果 成 功 地 交 换 了 数 据 , 则 返 回 非 零 值 ; 否 则 返 回 0 。

参 数

pPX

指 向 CPropExchange 对 象 的 指 针 ( 通 常 作 为 参 数 传 递 给

DoPropExchange )。

pszPropName

要 交 换 的 属 性 的 名 字 。

font

对 包 含 了 字 体 属 性 的 CFontHolder 对 象 的 引 用 。

pFontDesc

指 向 FONTDESC 结 构 的 指 针 , 该 结 构 包 含 了 在 pFontDispAmbient

NULL 时 用 来 初 始 化 字 体 属 性 的 缺 省 状 态 的 值 。

pFontDispAmbient

指 向 字 体 的 IFontDisp 接 口 的 指 针 , 用 于 初 始 化 字 体 属 性 的 缺 省 状 态 。

说 明

在 控 件 的 DoPropExchange 成 员 函 数 内 调 用 这 个 函 数 , 用 以 串 行 化 或 初 始 化 字体 类 型 的 属 性 。 属 性 的 值 将 从 字 体 ( 一 个 CFontHolder 引 用 ) 读 写 。 如 果 指 定了 pFontDescpFontDispAmbien t, 它 们 将 被 用 于 在 必 要 时 初 始 化 属 性 的 缺 省值 。 如 果 由 于 某 种 原 因 控 件 的 串 行 化 过 程 失 败 了 , 就 会 使 用 这 个 值 。 通 常 , 你在 pFontDesc 中 传 递 NULL , 在 pFontDispAmbient 中 传 递COleControl::AmbientFont 返 回 的 值 。 注 意 COleControl:: AmbientFont 返 回 的 字体 对 象 必 须 用 IFontDisp::Release 来 释 放 。

请 参 阅 COleControl::DoPropExchange, COleControl::AmbientFont

PX_IUnknown

BOOL PX_IUnknown( CPropExchange* pPX , LPCTSTR pszPropNam e,

LPUNKNOWN& pUnk , REFIID iid , LPUNKNOWN pUnkDefault = NULL );

返 回 值

如 果 成 功 地 交 换 了 数 据 , 则 返 回 非 零 值 ; 否 则 返 回 0 。

参 数

pPX

指 向 CPropExchange 对 象 的 指 针 ( 通 常 作 为 参 数 传 递 给

DoPropExchange )。

pszPropName

将 要 交 换 的 属 性 的 名 字 。

pUnk iid

对 包 含 了 对 象 的 接 口 变 量 的 引 用 , 该 变 量 代 表 属 性 的 值 。

接口 ID 指 明 控 件 将 使 用 属 性 对 象 的 哪 个 接 口 。

pUnk Default

属 性 的 缺 省 值 。

说 明

在 你 的 控 件 的 DoPropExchange 成 员 函 数 内 调 用 这 个 函 数 , 用 以 串 行 化 或 初 始化 一 个 具 有 IUnknown 接 口 的 对 象 所 代 表 的 属 性 。 属 性 的 值 将 从 pUnk 引 用 的变 量 中 读 写 。 如 果 指 定 了 pUnkDefault , 它 将 被 用 作 该 属 性 的 缺 省 值 。 如 果 由于 某 种 原 因 , 控 件 的 串 行 化 过 程 失 败 了 , 就 会 使 用 这 个 缺 省 值 。

请 参 阅 COleControl::DoPropExchange

PX_Long

BOOL PX_Long( CPropExchange* pPX , LPCTSTR pszPropNam e, long& lValue ); BOOL PX_Long( CPropExchange* pPX , LPCTSTR pszPropNam e, long& lValue , long lDefault );

返 回 值

如 果 成 功 地 交 换 了 数 据 , 则 返 回 非 零 值 ; 否 则 返 回 0 。

参 数

pPX

指 向 CPropExchange 对 象 的 指 针 ( 通 常 作 为 参 数 传 递 给

DoPropExchange )。

pszPropName

将 要 交 换 的 属 性 的 名 字 。

lValue

对 保 存 属 性 的 变 量 的 引 用 ( 通 常 是 你 的 类 的 成 员 变 量 ) 。

lDefault

属 性 的 缺 省 值 。

说 明

在 你 的 控 件 的 DoPropExchange 成 员 函 数 内 调 用 这 个 函 数 , 用 以 串 行 化 或 初 始化 一 个 long 类 型 的 属 性 。 属 性 的 值 将 从 lValue 引 用 的 变 量 中 读 写 。 如 果 指 定了 lDefault , 它 将 被 用 作 该 属 性 的 缺 省 值 。 如 果 由 于 某 种 原 因 , 控 件 的 串 行 化过 程 失 败 了 , 就 会 使 用 这 个 缺 省 值 。

请 参 阅 COleControl::DoPropExchange

PX_Picture

BOOL PX_Picture( CPropExchange* pPX , LPCTSTR pszPropNam e, CPictureHolder& pict );

BOOL PX_Picture( CPropExchange* pPX , LPCTSTR pszPropNam e, CPictureHolder& pict, CPictureHolder& pictDefault );

返 回 值

如 果 成 功 地 交 换 了 数 据 , 则 返 回 非 零 值 ; 否 则 返 回 0 。

参 数

pPX

指 向 CPropExchange 对 象 的 指 针 ( 通 常 作 为 参 数 传 递 给

DoPropExchange )。

pszPropName

将 要 交 换 的 属 性 的 名 字 。

pict

对 保 存 属 性 的 CPictureHolder 对 象 的 引 用 ( 通 常 是 你 的 类 的 成 员 变 量 ) 。

pict Default

属 性 的 缺 省 值 。

说 明

在 你 的 控 件 的 DoPropExchange 成 员 函 数 内 调 用 这 个 函 数 , 用 以 串 行 化 或 初 始

化 一 个 图 形 属 性 。属 性 的 值 将 从 pict 引 用 的 变 量 中 读 写 。如 果 指 定 了 pictDefault , 它 将 被 用 作 该 属 性 的 缺 省 值 。 如 果 由 于 某 种 原 因 , 控 件 的 串 行 化 过 程 失 败 了 , 就 会 使 用 这 个 缺 省 值 。

请 参 阅 COleControl::DoPropExchange

PX_Short

BOOL PX_Short( CPropExchange* pPX , LPCTSTR pszPropNam e, short& sValue ); BOOL PX_Short( CPropExchange* pPX , LPCTSTR pszPropNam e, short& sValue , short sDefault );

返 回 值

如 果 成 功 地 交 换 了 数 据 , 则 返 回 非 零 值 ; 否 则 返 回 0 。

参 数

pPX

指 向 CPropExchange 对 象 的 指 针 ( 通 常 作 为 参 数 传 递 给

DoPropExchange )。

pszPropName

sValue

将 要 交 换 的 属 性 的 名 字 。

对 保 存 属 性 的 变 量 的 引 用 ( 通 常 是 你 的 类 的 成 员 变 量 ) 。

s Default

属 性 的 缺 省 值 。

说 明

在 你 的 控 件 的 DoPropExchange 成 员 函 数 内 调 用 这 个 函 数 , 用 以 串 行 化 或 初 始化 一 个 short 类 型 的 属 性 。 属 性 的 值 将 从 sValue 引 用 的 变 量 中 读 写 。 如 果 指 定了 sDefault , 它 将 被 用 作 该 属 性 的 缺 省 值 。 如 果 由 于 某 种 原 因 , 控 件 的 串 行 化过 程 失 败 了 , 就 会 使 用 这 个 缺 省 值 。

请 参 阅 COleControl::DoPropExchange

PX_String

BOOL PX_String( CPropExchange* pPX , LPCTSTR pszPropNam e, CString&

strValue );

BOOL PX_String( CPropExchange* pPX , LPCTSTR pszPropNam e, CString&

strValue , CString strDefault );

返 回 值

如 果 成 功 地 交 换 了 数 据 , 则 返 回 非 零 值 ; 否 则 返 回 0 。

参 数

pPX

指 向 CPropExchange 对 象 的 指 针 ( 通 常 作 为 参 数 传 递 给

DoPropExchange )。

pszPropName

将 要 交 换 的 属 性 的 名 字 。

strValue

对 保 存 属 性 的 变 量 的 引 用 ( 通 常 是 你 的 类 的 成 员 变 量 ) 。

str Default

属 性 的 缺 省 值 。

说 明

在 你 的 控 件 的 DoPropExchange 成 员 函 数 内 调 用 这 个 函 数 , 用 以 串 行 化 或 初 始化 一 个 字 符 串 属 性 。 属 性 的 值 将 从 strValue 引 用 的 变 量 中 读 写 。 如 果 指 定 了strDefault , 它 将 被 用 作 该 属 性 的 缺 省 值 。 如 果 由 于 某 种 原 因 , 控 件 的 串 行 化 过

程 失 败 了 , 就 会 使 用 这 个 缺 省 值 。

请 参 阅 COleControl::DoPropExchange, CString

PX_ULong

BOOL PX_ULong( CPropExchange* pPX , LPCTSTR pszPropNam e, ULONG&

ulValue );

BOOL PX_ULong( CPropExchange* pPX , LPCTSTR pszPropNam e, ULONG&

ulValue , long ulDefault );

返 回 值

如 果 成 功 地 交 换 了 数 据 , 则 返 回 非 零 值 ; 否 则 返 回 0 。

参 数

pPX

指 向 CPropExchange 对 象 的 指 针 ( 通 常 作 为 参 数 传 递 给

DoPropExchange )。

pszPropName

将 要 交 换 的 属 性 的 名 字 。

ulValue

对 保 存 属 性 的 变 量 的 引 用 ( 通 常 是 你 的 类 的 成 员 变 量 ) 。

u lDefault

属 性 的 缺 省 值 。

说 明

在 你 的 控 件 的 DoPropExchange 成 员 函 数 内 调 用 这 个 函 数 , 用 以 串 行 化 或 初 始化 一 个 ULONG 类 型 的 属 性 。 属 性 的 值 将 从 ulValue 引 用 的 变 量 中 读 写 。 如 果指 定 了 ulDefault , 它 将 被 用 作 该 属 性 的 缺 省 值 。 如 果 由 于 某 种 原 因 , 控 件 的 串行 化 过 程 失 败 了 , 就 会 使 用 这 个 缺 省 值 。

请 参 阅 COleControl::DoPropExchange

PX_UShort

BOOL PX_UShort( CPropExchange* pPX , LPCTSTR pszPropNam e, USHORT&

usValue );

BOOL PX_UShort( CPropExchange* pPX , LPCTSTR pszPropNam e, USHORT&

usValue , USHORT usDefault );

返 回 值

如 果 成 功 地 交 换 了 数 据 , 则 返 回 非 零 值 ; 否 则 返 回 0 。

参 数

pPX

指 向 CPropExchange 对 象 的 指 针 ( 通 常 作 为 参 数 传 递 给

DoPropExchange )。

pszPropName

将 要 交 换 的 属 性 的 名 字 。

usValue

对 保 存 属 性 的 变 量 的 引 用 ( 通 常 是 你 的 类 的 成 员 变 量 ) 。

us Default

属 性 的 缺 省 值 。

说 明

在 你 的 控 件 的 DoPropExchange 成 员 函 数 内 调 用 这 个 函 数 , 用 以 串 行 化 或 初 始化 一 个 unsigned short 类 型 的 属 性 。 属 性 的 值 将 从 usValue 引 用 的 变 量 中 读 写 。如 果 指 定 了 usDefault , 它 将 被 用 作 该 属 性 的 缺 省 值 。 如 果 由 于 某 种 原 因 , 控 件

的 串 行 化 过 程 失 败 了 , 就 会 使 用 这 个 缺 省 值 。

请 参 阅 COleControl::DoPropExchange

PX_VBXFontConvert

BOOL PX_VBXFontConvert( CPropExchange* pPX , CFontHolder& font );

返 回 值

如 果 成 功 地 交 换 了 数 据 , 则 返 回 非 零 值 ; 否 则 返 回 0 。

参 数

pPX

font

指 向 CPropExchange 对 象 的 指 针 ( 通 常 作 为 参 数 传 递 给

DoPropExchange )。

OLE 控 件 的 字 体 属 性 , 包 含 了 转 换 的 VBX 控 件 与 字 体 有 关 的 属 性 。

说 明

在 控 件 的 DoPropExchange 成 员 函 数 内 部 调 用 这 个 函 数 , 转 换 VBX 控 件 与 字 体

有 关 的 属 性 , 用 以 初 始 化 字 体 属 性 。

这 个 函 数 只 能 被 那 些 设 计 来 直 接 代 替 VBX 控 件 的 OLE 控 件 使 用 。当 V isual Basic 开 发 环 境 转 换 一 个 包 含 VBX 控 件 的 窗 体 , 使 用 相 应 的 OLE 控 件 时 , 它 将 会 调用 控 件 的 IDataObject::SetData 函 数 , 传 递 一 个 包 含 了 VBX 控 件 的 属 性 数 据 的属 性 集 。 这 个 操 作 随 后 使 控 件 的 DoPropExchange 函 数 被 激 活 。DoPropExchange 能 够 调 用 PX_VBXFontConvert 以把 VBX 控 件 与 字 体 有 关 的 属 性 ( 例 如 , “ 字体 名 ” 、 “ 字 体 大 小 ” 等 ) 转 换 为 OLE 控 件 中 字 体 属 性 的 相 应 内 容 。

只 有 当 控 件 是 从 VBX 窗 体 应 用 程 序 中 转 换 而 来 时 才 能 调 用

PX_VBXFontConvert 。 例 如 :

void CSampleCtrl::DoPropExchange(CPropExchange* pPX)

{

ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor)); COleControl::DoPropExchange(pPX);

if (IsConvertingVBX())

PX_VBXFontConvert(pPX, InternalGetFont());

}

请 参 阅 COleControl::DoPropExchange, COleControl::AmbientFont, PX_Font

RFX_Binary

void RFX_Binary( CFieldExchange* pFX , const char* szNam e, CByteArray& value , int nMaxLength = 255 );

参 数

pFX

指向 CFieldExchange 类 对 象 的 指 针 。 这 个 对 象 包 含 了 一 些 信 息 , 用 于 定义 函 数 调 用 的 上 下 文 环 境 。 有 关 CFieldExchange 对 象 所 指 定 操 作 的 更 多信 息 参 见 “ Visual C++ 程 序 员 指 南 ” 中 的 文 章 “ 记 录 字 段 交 换 : RFX 如何 工 作 ” 。

szName

数 据 列 的 名 字 。

value

指 定 数 据 成 员 所 保 存 的 值 – – – – 要 被 交 换 的 值 。 对 于 从 记 录 集 到 数 据 源 的数 据 传 送 , CByteArray 类 型 的 值 是 从 指 定 的 数 据 成 员 中 获 得 的 。 对 于 从数 据 源 到 记 录 集 的 数 据 传 送 , 该 值 保 存 在 指 定 的 数 据 成 员 中 。

nMaxLength

要 被 交 换 的 字 符 串 或 数 组 对 象 的 最 大 长 度 。 nMaxLength 的 缺 省 值 为 255 。合 法 的 值 为 1 到 INT_MAX 。 框 架 将 分 配 这 么 多 内 存 。 为 了 获 得 最 好 的

性 能 , 应 该 传 递 一 个 足 够 大 的 值 , 使 之 能 够 容 纳 你 要 求 的 最 大 数 据 项 。

说 明

RFX_Binary 函 数 在 CRecordset 对 象 的 字 段 数 据 成 员 和 数 据 源 中 记 录 的

SQL_BINARY , SQL_VARBINARY 或 SQL_LONGVARBINARY 型 数 据 列 之

间 交 换 字 节 数 组 数 据 。 数 据 源 中 这 些 类 型 的 数 据 被 映 射 到 记 录 集 中 的

CByteArray 类 型 。

示 例

参 见 “ RFX_Tex t”

请 参 阅 RFX_Text, RFX_Bool, RFX_Long, RFX_Int, RFX_Single, RFX_Double, RFX_Date, RFX_Byte, RFX_LongBinary, CFieldExchange::SetFieldType

RFX_Binary_Bulk

void RFX_Binary_Bulk( CFieldExchange* pFX , LPCTSTR szNam e , BYTE**

prgByteVals , long** prgLength s, int nMaxLength );

pFX

指向 CFieldExchange 类 对 象 的 指 针 。 这 个 对 象 包 含 了 一 些 信 息 , 用 于 定义 函 数 调 用 的 上 下 文 环 境 。 有 关 CFieldExchange 对 象 能 指 定 的 操 作 的 更多 信 息 参 见 “ V isual C++ 程 序 员 指 南 ” 中 的 文 章 “ 记 录 字 段 交 换 : RFX 如 何 工 作 ” 。

szName

数 据 列 的 名 字 。

prgByteVals

指向 BYTE 值 的 数 组 的 指 针 。 这 个 数 组 中 保 存 了 将 要 从 数 据 源 传 送 到 记录 集 的 数 据 。

prgLengths

指 向 长 整 数 数 组 的 指 针 。 这 个 数 组 中 保 存 了 prgByteVals 指 向 的 数 组 中 每个 值 的 以 字 节 为 单 位 的 长 度 。 注 意 如 果 对 应 的 数 据 项 中 是 个 NULL 值 , 那 么 这 个 数 组 中 将 保 存 一 个 SQL_NULL_DATA 值 。 更 多 的 细 节 参 见ODBC SDK 程 序 员 参 考 中 的 ODBC API 函数 SQLBindCol 。

nMaxLength

prgByteVals 指 向 的 数 组 中 保 存 的 指 定 最 大 允 许 长 度 。 为 了 确 保 数 据 不 被截 断 , 应 该 传 递 一 个 足 够 大 的 值 , 使 之 能 够 容 纳 你 要 求 的 最 大 数 据 项 。

RFX_Binary_Bulk 函 数 将 ODBC 数 据 源 的 数 据 列 中 的 多 行 字 节 数 据 传 送 给CRecordset 的 派 生 对 象 中 的 相 应 数 组 。 数 据 源 的 列 可 以 属 于 以 下 类 型 : SQL_BINARY , SQL_VARBINARY 或 SQL_LONGVARBINARY 。 记 录 集 必 须

定 义 一 个 BYTE 指 针 型 的 字 段 数 据 成 员 。

如 果 你 把 prgByteValsprgLengths 初 始 化 为 NULL , 那 么 它 们 指 向 的 数 组 将自 动 分 配 , 其 大 小 等 于 行 集 的 大 小 。

注 意 成 组 记 录 字 段 交 换 仅 把 数 据 从 数 据 源 传 送 到 记 录 集 对 象 。 要 使 你的 记 录 集 可 更 新 , 必 须 使 用 ODBC 的 API 函 数 SQLSetPos 。 这 种 做 法 的 例子 参 见 DBFETCH 。

更 多 的 信 息 参 见 “ V isual C++ 程 序 员 指 南 ” 中 的 文 章 “ 记 录 集 : 成 组 获 取 记 录

( ODBC ) ” 和 “ 记 录 字 段 交 换 ( RFX ) ” 。

示 例

参 见 RFX_Text_Bulk.

请 参 阅 RFX_Bool_Bulk, RFX_Byte_Bulk, RFX_Date_Bulk, RFX_Double_Bulk, RFX_Int_Bulk, RFX_Long_Bulk, RFX_Single_Bulk, RFX_Text_Bulk, CFieldExchange::SetFieldType

RFX_Bool

void RFX_B oo l( CFieldExchange* pFX , const char* szNam e, BOOL & value );

参 数

pFX

指向 CFieldExchange 类 对 象 的 指 针 。 这 个 对 象 包 含 了 一 些 信 息 , 用 于 定义 函 数 调 用 的 上 下 文 环 境 。 有 关 CFieldExchange 对 象 能 指 定 的 操 作 的 更多 信 息 参 见 “ V isual C++ 程 序 员 指 南 ” 中 的 文 章 “ 记 录 字 段 交 换 : RFX 如 何 工 作 ” 。

szName

数 据 列 的 名 字 。

value

指 定 的 数 据 成 员 所 保 存 的 值 – – – – 要 被 交 换 的 值 。 对 于 从 记 录 集 到 数 据 源的 数 据 传 送 , BOOL 类 型 的 值 是 从 指 定 的 数 据 成 员 中 获 得 的 。 对 于 从 数据 源 到 记 录 集 的 数 据 传 送 , 该 值 保 存 在 指 定 的 数 据 成 员 中 。

说 明

RFX_BOOL 函 数 在 CRecordset 对 象 的 字 段 数 据 成 员 和 数 据 源 中 记 录 的 SQL_BIT

型 数 据 列 之 间 交 换 布 尔 型 数 据 。

示 例

参 见 RFX_Text.

请 参 阅 RFX_Text, RFX_L ong , RFX_Int, RFX_Single, RFX_Double, RFX_Date, RFX_Byte, RFX_Binary, RFX_LongBinary, CFieldExchange::SetFieldType

RFX_B oo l_Bulk

void RFX_Bool_Bulk( CFieldExchange* pFX , LPCTSTR szNam e, BOOL**

prg Boo lVals, long** prgLength s);

参 数

pFX

指向 CFieldExchange 类 对 象 的 指 针 。 这 个 对 象 包 含 了 一 些 信 息 , 用 于 定义 函 数 调 用 的 上 下 文 环 境 。 有 关 CFieldExchange 对 象 所 指 定 的 操 作 的 更多 信 息 参 见 “ V isual C++ 程 序 员 指 南 ” 中 的 文 章 “ 记 录 字 段 交 换 : RFX 如 何 工 作 ” 。

szName

数 据 列 的 名 字 。

prgBoolVals

指向 BOOL 值 数 组 的 指 针 。 这 个 数 组 中 保 存 了 将 要 从 数 据 源 传 送 到 记 录集 的 数 据 。

prgLengths

指 向 长 整 数 数 组 的 指 针 。 这 个 数 组 中 保 存 了 prgBoolVals 指 向 的 数 组 中 每个 值 的 以 字 节 为 单 位 的 长 度 。 注 意 如 果 对 应 的 数 据 项 中 是 个 NULL 值 , 那 么 这 个 数 组 中 将 保 存 一 个 SQL_NULL_DATA 值 。 更 多 的 细 节 参 见ODBC SDK 程 序 员 参 考 中 的 ODBC API 函数 SQLBindCol 。

说 明

RFX_Bool_Bulk 函 数 将 ODBC 数 据 源 的 数 据 列 中 的 多 行 布 尔 数 据 传 送 给CRecordset 派 生 对 象 中 的 相 应 数 组 。 数 据 源 的 列 必 须 是 SQL_BIT 类 型 的 。 记录 集 必 须 定 义 一 个 BOOL 指 针 型 的 字 段 数 据 成 员 。

如 果 你 把 prgBoolValsprgLengths 初 始 化 为 NULL , 那 么 它 们 指 向 的 数 组 将自 动 分 配 , 其 大 小 等 于 行 集 的 大 小 。

注 意 成 组 记 录 字 段 交 换 仅 把 数 据 从 数 据 源 传 送 到 记 录 集 对 象 。 如 果 要使 你 的 记 录 集 可 更 新 , 必 须 使 用 ODBC 的 API 函 数 SQLSetPos 。 这 种 做 法的 例 子 参 见 DBFETCH 。

更 多 的 信 息 参 见 “ V isual C++ 程 序 员 指 南 ” 中 的 文 章 “ 记 录 集 : 成 组 获 取 记 录

( ODBC ) ” 和 “ 记 录 字 段 交 换 ( RFX ) ” 。

示 例

参 见 RFX_Text_Bulk.

请 参 阅 RFX_Binary_Bulk, RFX_Byte_Bulk, RFX_Date_Bulk, RFX_Double_Bulk, RFX_Int_Bulk, RFX_Long_Bulk, RFX_Single_Bulk, RFX_Text_Bulk, CFieldExchange::SetFieldType

RFX_B yte

void RFX_B yte ( CFieldExchange* pFX , const char* szName , BYTE & value );

参 数

pFX

指向 CFieldExchange 类 对 象 的 指 针 。 这 个 对 象 包 含 了 一 些 信 息 , 用 于 定义 函 数 调 用 的 上 下 文 环 境 。 有 关 CFieldExchange 对 象 所 指 定 的 操 作 的 更多 信 息 参 见 “ V isual C++ 程 序 员 指 南 ” 中 的 文 章 “ 记 录 字 段 交 换 : RFX 如 何 工 作 ” 。

szName

数 据 列 的 名 字 。

value

指 定 的 数 据 成 员 所 保 存 的 值 – – – – 要 被 交 换 的 值 。 对 于 从 记 录 集 到 数 据 源的 数 据 传 送 , BYTE 类 型 的 值 是 从 指 定 的 数 据 成 员 中 获 得 的 。 对 于 从 数据 源 到 记 录 集 的 数 据 传 送 , 该 值 保 存 在 指 定 的 数 据 成 员 中 。

说 明

RFX_Byte 函 数 在 CRecordset 对 象 的 字 段 数 据 成 员 和 数 据 源 中 记 录 的

SQL_TINYINT 型 数 据 列 之 间 交 换 单 字 节 数 据 。

示 例

参 见 RFX_Text.

请 参 阅 RFX_Text, RFX _ Bool , RFX_Long, RFX_Int, RFX_Single, RFX_Double, RFX_Date, RFX_Binary, RFX_LongBinary, CFieldExchange::SetFieldType

RFX_B yte _Bulk

void RFX_Byte_Bulk( CFieldExchange* pFX , LPCTSTR szNam e, BYTE**

prg Byte Vals , long** prgLength s);

参 数

pFX

指向 CFieldExchange 类 对 象 的 指 针 。 这 个 对 象 包 含 了 一 些 信 息 , 用 于 定义 函 数 调 用 的 上 下 文 环 境 。 有 关 CFieldExchange 对 象 所 指 定 的 操 作 的 更多 信 息 参 见 “ V isual C++ 程 序 员 指 南 ” 中 的 文 章 “ 记 录 字 段 交 换 : RFX 如 何 工 作 ” 。

szName

数 据 列 的 名 字 。

prgByteVals

指向 BYTE 值 数 组 的 指 针 。 这 个 数 组 中 保 存 了 将 要 从 数 据 源 传 送 到 记 录集 的 数 据 。

prgLengths

指 向 长 整 数 数 组 的 指 针 。 这 个 数 组 中 保 存 了 prgByteVals 指 向 的 数 组 中 每个 值 的 以 字 节 为 单 位 的 长 度 。 注 意 如 果 对 应 的 数 据 项 中 是 个 NULL 值 , 那 么 这 个 数 组 中 将 保 存 一 个 SQL_NULL_DATA 值 。 更 多 的 细 节 参 见ODBC SDK 程 序 员 参 考 中 的 ODBC API 函数 SQLBindCol 。

说 明

RFX_Byte_Bulk 函 数 将 ODBC 数 据 源 的 数 据 列 中 的 多 行 布 尔 数 据 传 送 给

CRecordset 的 派 生 对 象 中 的 相 应 数 组 。 数 据 源 的 列 必 须 是 SQL_TINYINT 类 型的 。 记 录 集 必 须 定 义 一 个 BYTE 指 针 型 的 字 段 数 据 成 员 。

如 果 你 把 prgByteValsprgLengths 初 始 化 为 NULL , 那 么 它 们 指 向 的 数 组 将自 动 分 配 , 其 大 小 等 于 行 集 的 大 小 。

注 意 成 组 记 录 字 段 交 换 仅 把 数 据 从 数 据 源 传 送 到 记 录 集 对 象 。 如 果 要使 你 的 记 录 集 可 更 新 , 必 须 使 用 ODBC 的 API 函 数 SQLSetPos 。 这 种 做 法的 例 子 参 见 DBFETCH 。

更 多 的 信 息 参 见 “ V isual C++ 程 序 员 指 南 ” 中 的 文 章 “ 记 录 集 : 成 组 获 取 记 录

( ODBC ) ” 和 “ 记 录 字 段 交 换 ( RFX ) ” 。

示 例

参 见 RFX_Text_Bulk.

请 参 阅 RFX_Binary_Bulk, RFX_Bool_Bulk, RFX_Date_Bulk, RFX_Double_Bulk, RFX_Int_Bulk, RFX_Long_Bulk, RFX_Single_Bulk, RFX_Text_Bulk, CFieldExchange::SetFieldType

RFX_Date

void RFX_Date( CFieldExchange* pFX , const char* szName , CTime& value );

void RFX_Date( CFieldExchange* pFX , const char* szNam e, TIMESTAMP_STRUCT& value );

参 数

pFX

指向 CFieldExchange 类 对 象 的 指 针 。 这 个 对 象 包 含 了 一 些 信 息 , 用 于 定义 函 数 调 用 的 上 下 文 环 境 。 有 关 CFieldExchange 对 象 能 指 定 的 操 作 的 更多 信 息 参 见 “ V isual C++ 程 序 员 指 南 ” 中 的 文 章 “ 记 录 字 段 交 换 : RFX 如 何 工 作 ” 。

szName

数 据 列 的 名 字 。

value

指 定 的 数 据 成 员 所 保 存 的 值 – – – – 要 被 交 换 的 值 。 在 函 数 的 两 个 版 本 中 , value 的 数 据 类 型 是 不 一 样 的 。 函 数 的 第 一 个 版 本 使 用 对 CTime 对 象 的引 用 。 对 于 从 记 录 集 到 数 据 源 的 数 据 传 送 , 该 值 是 从 指 定 的 数 据 成 员 中获 得 的 。 对 于 从 数 据 源 到 记 录 集 的 数 据 传 送 , 该 值 保 存 在 指 定 的 数 据 成员 中 。 函 数 的 第 二 个 版 本 使 用 对 TIMESTAMP_ STRUCT 结 构 的 引 用 。你 必 须 在 调 用 前 自 己 设 置 这 个 结 构 。 对 话 框 数 据 交 换 ( DDX ) 和ClassWizard 都 不 支 持 这 个 版 本 。 在 你 的 字 段 映 射 中 , 将 你 对 RFX_Date 的 第 二 个 版 本 的 调 用 写 在 ClassWizard 的 注 释 分 界 符 之 外 。

RFX_Date 函 数 在 CRecordset 对 象 的 字 段 数 据 成 员 和 数 据 源 中 记 录 的SQL_DATE , SQL_TIME 或 SQL_TIMESTAMP 型 数 据 列 之 间 交 换 CTime 或TIMESTAMP_STRUCT 数 据 。

这 个 函 数 对 应 CTime 的 版 本 会 带 来 一 些 中 间 处 理 的 负 担 , 范 围 也 有 限 制 。 如 果你 认 为 这 些 因 素 很 重 要 , 那 就 使 用 第 二 个 版 本 的 函 数 。 不 过 要 注 意 它 缺 乏ClassWizard 和 DDX 支 持 , 并 且 需 要 你 自 己 设 置 结 构 体 。

示 例

参 见 “ RFX_Tex t”

请 参 阅 RFX_Text, RFX_Bool, RFX_Long, RFX_Int, RFX_Single, RFX_Double, RFX_Byte, RFX_Binary, RFX_LongBinary, CFieldExchange::SetFieldType

RFX _ Date _Bulk

void RFX_Date_Bulk( CFieldExchange* pFX , LPCTSTR szNam e, TIMESTAMP_STRUCT** prgTSVals , long** prgLengths );

pFX

指向 CFieldExchange 类 对 象 的 指 针 。 这 个 对 象 包 含 了 一 些 信 息 , 用 于 定义 函 数 调 用 的 上 下 文 环 境 。 有 关 CFieldExchange 对 象 能 指 定 的 操 作 的 更多 信 息 参 见 “ V isual C++ 程 序 员 指 南 ” 中 的 文 章 “ 记 录 字 段 交 换 : RFX 如 何 工 作 ” 。

szName

数 据 列 的 名 字 。

prg TS Vals

指 向 TIMESTAMP_STRUCT 值 数 组 的 指 针 。 这 个 数 组 中 保 存 了 将 要 从数 据 源 传 送 到 记 录 集 的 数 据 。 有 关 TIMESTAMP_STRUCT 数 据 类 型 的更 多 信 息 参 见“ ODBC SDK 程 序 员 参 考 ” 中 的 文 章“ 记 录 字 段 交 换 : RFX 如 何 工 作 ” 。

prgLengths

指 向 长 整 数 数 组 的 指 针 。 这 个 数 组 中 保 存 了 prgBoolVals 指 向 的 数 组 中 每个 值 的 以 字 节 为 单 位 的 长 度 。 注 意 如 果 对 应 的 数 据 项 中 是 个 NULL 值 , 那 么 这 个 数 组 中 将 保 存 一 个 SQL_NULL_DATA 值 。 更 多 的 细 节 参 见ODBC SDK 程 序 员 参 考 中 的 ODBC API 函数 SQLBindCol 。

RFX_Date_Bulk 函 数 将 ODBC 数 据 源 的 数 据 列 中 的 多 行 TIMESTAMP_STRUCT 数 据 传 送 给 CRecordset 的 派 生 对 象 中 的 相 应 数 组 。 数 据 源 的 列 可 以 是 以 下 类型 : SQL_DATE , SQL_TIME 或 SQL_TIMESTAMP 。 记 录 集 必 须 定 义 一 个TIMESTAMP_STRUCT 指 针 型 的 字 段 数 据 成 员 。

如 果 你 把 prgTSValsprgLengths 初 始 化 为 NULL , 那 么 它 们 指 向 的 数 组 将 自动 分 配 , 其 大 小 等 于 行 集 的 大 小 。

注 意 成 组 记 录 字 段 交 换 仅 把 数 据 从 数 据 源 传 送 到 记 录 集 对 象 。 如 果 要使 你 的 记 录 集 可 更 新 , 必 须 使 用 ODBC 的 API 函 数 SQLSetPos 。 这 种 做 法的 例 子 参 见 DBFETCH 。

更 多 的 信 息 参 见 “ V isual C++ 程 序 员 指 南 ” 中 的 文 章 “ 记 录 集 : 成 组 获 取 记 录

( ODBC ) ” 和 “ 记 录 字 段 交 换 ( RFX ) ” 。

示 例

参 见 RFX_Text_Bulk.

请 参 阅 RFX_Binary_Bulk, RFX_Bool_Bulk, RFX_Byte_Bulk, RFX_Double_Bulk, RFX_Int_Bulk, RFX_Long_Bulk, RFX_Single_Bulk, RFX_Text_Bulk, CFieldExchange::SetFieldType

RFX _ Double

void RFX_Double( CFieldExchange* pFX , const char* szNam e, double & value );

参 数

pFX

指向 CFieldExchange 类 对 象 的 指 针 。 这 个 对 象 包 含 了 一 些 信 息 , 用 于 定义 函 数 调 用 的 上 下 文 环 境 。 有 关 CFieldExchange 对 象 能 指 定 的 操 作 的 更多 信 息 参 见 “ V isual C++ 程 序 员 指 南 ” 中 的 文 章 “ 记 录 字 段 交 换 : RFX 如 何 工 作 ” 。

szName

数 据 列 的 名 字 。

value

指 定 的 数 据 成 员 所 保 存 的 值 — — 要 被 交 换 的 值 。 对 于 从 记 录 集 到 数 据 源的 数 据 传 送 , double 类 型 的 值 是 从 指 定 的 数 据 成 员 中 获 得 的 。 对 于 从 数据 源 到 记 录 集 的 数 据 传 送 , 该 值 保 存 在 指 定 的 数 据 成 员 中 。

说 明

RFX_Double 函 数 在 CRecordset 对 象 的 字 段 数 据 成 员 和 数 据 源 中 记 录 的

SQL_DOUBLE 型 数 据 列 之 间 交 换 double float 数 据 。

示 例

参 见 RFX_Text.

请 参 阅 RFX_Text, RFX _ Boo l, RFX_Long, RFX_Int, RFX_Single, RFX_Date, RFX_Byte,RFX_Binary, RFX_LongBinary, CFieldExchange::SetFieldType

RFX _ Double _Bulk

void RFX_Double_Bulk( CFieldExchange* pFX , LPCTSTR szNam e, double**

prg Db l Vals, long** prgLengths );

参 数

pFX

指向 CFieldExchange 类 对 象 的 指 针 。 这 个 对 象 包 含 了 一 些 信 息 , 用 于 定义 函 数 调 用 的 上 下 文 环 境 。 有 关 CFieldExchange 对 象 能 指 定 的 操 作 的 更多 信 息 参 见 “ V isual C++ 程 序 员 指 南 ” 中 的 文 章 “ 记 录 字 段 交 换 : RFX 如 何 工 作 ” 。

szName

数 据 列 的 名 字 。

prg Db l Vals

指向 double 值 数 组 的 指 针 。 这 个 数 组 中 保 存 了 将 要 从 数 据 源 传 送 到 记 录集 的 数 据 。

prgLengths

指 向 长 整 数 数 组 的 指 针 。 这 个 数 组 中 保 存 了 prgDblVals 指 向 的 数 组 中 每个 值 的 以 字 节 为 单 位 的 长 度 。 注 意 如 果 对 应 的 数 据 项 中 是 个 NULL 值 , 那 么 这 个 数 组 中 将 保 存 一 个 SQL_NULL_DATA 值 。 更 多 的 细 节 参 见ODBC SDK 程 序 员 参 考 中 的 ODBC API 函数 SQLBindCol 。

说 明

RFX_Double_Bulk 函 数 将 ODBC 数 据 源 的 数 据 列 中 的 多 行 双 精 度 浮 点 数 据 传 送给 CRecordset 的 派 生 对 象 中 的 相 应 数 组 。 数 据 源 的 列 必 须 是 SQL_DOUBLE 类型 的 。 记 录 集 必 须 定 义 一 个 double 指 针 型 的 字 段 数 据 成 员 。

如 果 你 把 prgDblValsprgLengths 初 始 化 为 NULL , 那 么 它 们 指 向 的 数 组 将 自动 分 配 , 其 大 小 等 于 行 集 的 大 小 。

注 意 成 组 记 录 字 段 交 换 仅 把 数 据 从 数 据 源 传 送 到 记 录 集 对 象 。 如 果 要使 你 的 记 录 集 可 更 新 , 必 须 使 用 ODBC 的 API 函 数 SQLSetPos 。 这 种 做 法的 例 子 参 见 DBFETCH 。

更 多 的 信 息 参 见 “ V isual C++ 程 序 员 指 南 ” 中 的 文 章 “ 记 录 集 : 成 组 获 取 记 录

( ODBC ) ” 和 “ 记 录 字 段 交 换 ( RFX ) ” 。

示 例

参 见 “ RFX_Text_Bulk ”

请 参 阅 RFX_Binary_Bulk, RFX_Bool_Bulk, RFX_Byte_Bulk, RFX_Date_Bulk, RFX_Int_Bulk, RFX_Long_Bulk, RFX_Single_Bulk, RFX_Text_Bulk, CFieldExchange::SetFieldType

RFX_ Int

void RFX _ Int( CFieldExchange* pFX , const char* szNam e , int& valu e);

参 数

pFX

指向 CFieldExchange 类 对 象 的 指 针 。 这 个 对 象 包 含 了 一 些 信 息 , 用 于 定义 函 数 调 用 的 上 下 文 环 境 。 有 关 CFieldExchange 对 象 能 指 定 的 操 作 的 更多 信 息 参 见 “ V isual C++ 程 序 员 指 南 ” 中 的 文 章 “ 记 录 字 段 交 换 : RFX 如 何 工 作 ” 。

szName

数 据 列 的 名 字 。

value

指 定 的 数 据 成 员 所 保 存 的 值 – – – – 要 被 交 换 的 值 。 对 于 从 记 录 集 到 数 据 源的 数 据 传 送 , int 类 型 的 值 是 从 指 定 的 数 据 成 员 中 获 得 的 。 对 于 从 数 据 源到 记 录 集 的 数 据 传 送 , 该 值 保 存 在 指 定 的 数 据 成 员 中 。

说 明

RFX_Int 函 数 在 CRecordset 对 象 的 字 段 数 据 成 员 和 数 据 源 中 记 录 的

SQL_SMALLINT 型 数 据 列 之 间 交 换 整 数 数 据 。

示 例

参 见 “ RFX_Text. ”

请 参 阅 RFX_Text, RFX_Bool, RFX_Long, RFX_Single, RFX_Double, RFX_Date RFX_Byte, RFX_Binary, RFX_LongBinary, CFieldExchange::SetFieldType

RFX_ Int_Bulk

void RFX _Int_Bulk( CFieldExchange* pFX , LPCTSTR szNam e, int** prg In tVals , long** prgLengths );

参 数

pFX

指向 CFieldExchange 类 对 象 的 指 针 。 这 个 对 象 包 含 了 一 些 信 息 , 用 于 定义 函 数 调 用 的 上 下 文 环 境 。 有 关 CFieldExchange 对 象 能 指 定 的 操 作 的 更多 信 息 参 见 “ V isual C++ 程 序 员 指 南 ” 中 的 文 章 “ 记 录 字 段 交 换 : RFX 如 何 工 作 ” 。

szName

数 据 列 的 名 字 。

prg Int Vals

指 向 整 数 数 组 的 指 针 。 这 个 数 组 中 保 存 了 将 要 从 数 据 源 传 送 到 记 录 集 的数 据 。

prgLengths

指 向 长 整 数 数 组 的 指 针 。 这 个 数 组 中 保 存 了 prgIntVals 指 向 的 数 组 中 每个 值 的 以 字 节 为 单 位 的 长 度 。 注 意 如 果 对 应 的 数 据 项 中 是 个 NULL 值 , 那 么 这 个 数 组 中 将 保 存 一 个 SQL_NULL_DATA 值 。 更 多 的 细 节 参 见ODBC SDK 程 序 员 参 考 中 的 ODBC API 函数 SQLBindCol 。

说 明

RFX_Int_Bulk 函 数 将 ODBC 数 据 源 的 数 据 列 中 的 多 行 整 数 数 据 传 送 给

CRecordset 的 派 生 对 象 中 的 相 应 数 组 。 数 据 源 的 列 必 须 是 SQL_SMALLINT 类型 的 。 记 录 集 必 须 定 义 一 个 int 指 针 型 的 字 段 数 据 成 员 。

如 果 你 把 prgIntValsprgLengths 初 始 化 为 NULL , 那 么 它 们 指 向 的 数 组 将 自动 分 配 , 其 大 小 等 于 行 集 的 大 小 。

注 意 成 组 记 录 字 段 交 换 仅 把 数 据 从 数 据 源 传 送 到 记 录 集 对 象 。 如 果 要使 你 的 记 录 集 可 更 新 , 必 须 使 用 ODBC 的 API 函 数 SQLSetPos 。 这 种 做 法的 例 子 参 见 DBFETCH 。

更 多 的 信 息 参 见 “ V isual C++ 程 序 员 指 南 ” 中 的 文 章 “ 记 录 集 : 成 组 获 取 记 录

( ODBC ) ” 和 “ 记 录 字 段 交 换 ( RFX ) ” 。

示 例

参 见 “ RFX_Text_Bulk .”

请 参 阅 RFX_Binary_Bulk, RFX_Bool_Bulk, RFX_Byte_Bulk, RFX_Date_Bulk, RFX_ Double _Bulk, RFX_Long_Bulk, RFX_Single_Bulk, RFX_Text_Bulk, CFieldExchange::SetFieldType

RFX _ Long

void RFX _ Long ( CFieldExchange* pFX , const char* szNam e, LONG & value );

参 数

pFX

指向 CFieldExchange 类 对 象 的 指 针 。 这 个 对 象 包 含 了 一 些 信 息 , 用 于 定义 函 数 调 用 的 上 下 文 环 境 。 有 关 CFieldExchange 对 象 能 指 定 的 操 作 的 更多 信 息 参 见 “ V isual C++ 程 序 员 指 南 ” 中 的 文 章 “ 记 录 字 段 交 换 : RFX 如 何 工 作 ” 。

szName

数 据 列 的 名 字 。

value

指 定 的 数 据 成 员 所 保 存 的 值 – – – – 要 被 交 换 的 值 。 对 于 从 记 录 集 到 数 据 源的 数 据 传 送 , long 类 型 的 值 是 从 指 定 的 数 据 成 员 中 获 得 的 。 对 于 从 数 据源 到 记 录 集 的 数 据 传 送 , 该 值 保 存 在 指 定 的 数 据 成 员 中 。

说 明

RFX_Long 函 数 在 CRecordset 对 象 的 字 段 数 据 成 员 和 数 据 源 中 记 录 的

SQL_INTEGER 型 数 据 列 之 间 交 换 整 数 数 据 。

示 例

参 见 “ RFX_Text. ”

RFX_Byte, RFX_Binary, RFX_LongBinary, CFieldExchange::SetFieldType

RFX _ Long _Bulk

void RFX_ Long _Bulk( CFieldExchange* pFX , LPCTSTR szNam e, long **

prg Long Vals , long** prgLengths );

参 数

pFX

指向 CFieldExchange 类 对 象 的 指 针 。 这 个 对 象 包 含 了 一 些 信 息 , 用 于 定义 函 数 调 用 的 上 下 文 环 境 。 有 关 CFieldExchange 对 象 能 指 定 的 操 作 的 更多 信 息 参 见 “ V isual C++ 程 序 员 指 南 ” 中 的 文 章 “ 记 录 字 段 交 换 : RFX 如 何 工 作 ” 。

szName

数 据 列 的 名 字 。

prg Long Vals

指 向 长 整 数 数 组 的 指 针 。 这 个 数 组 中 保 存 了 将 要 从 数 据 源 传 送 到 记 录 集的 数 据 。

prgLengths

每 个 值 的 以 字 节 为 单 位 的 长 度 。 注 意 如 果 对 应 的 数 据 项 中 是 个 NULL 值 , 那 么 这 个 数 组 中 将 保 存 一 个 SQL_NULL_DATA 值 。 更 多 的 细 节 参 见ODBC SDK 程 序 员 参 考 中 的 ODBC API 函数 SQLBindCol 。

说 明

RFX_Long_Bulk 函 数 将 ODBC 数 据 源 的 数 据 列 中 的 多 行 长 整 数 数 据 传 送 给CRecordset 的 派 生 对 象 中 的 相 应 数 组 。 数 据 源 的 列 必 须 是 SQL_INTEGER 类 型的 。 记 录 集 必 须 定 义 一 个 long 指 针 型 的 字 段 数 据 成 员 。

如 果 你 把 prgLongValsprgLengths 初 始 化 为 NULL , 那 么 它 们 指 向 的 数 组 将自 动 分 配 , 其 大 小 等 于 行 集 的 大 小 。

注 意 成 组 记 录 字 段 交 换 仅 把 数 据 从 数 据 源 传 送 到 记 录 集 对 象 。 要 使 你的 记 录 集 可 更 新 , 必 须 使 用 ODBC 的 API 函 数 SQLSetPos 。 这 种 做 法 的 例子 参 见 DBFETCH 。

更 多 的 信 息 参 见 “ V isual C++ 程 序 员 指 南 ” 中 的 文 章 “ 记 录 集 : 成 组 获 取 记 录

( ODBC ) ” 和 “ 记 录 字 段 交 换 ( RFX ) ” 。

示 例

参 见 “ RFX_Text_Bulk .”

请 参 阅 RFX_Binary_Bulk, RFX_Bool_Bulk, RFX_Byte_Bulk, RFX_Date_Bulk, RFX _ Double _Bulk, RFX _Int_Bulk, RFX_Single_Bulk, RFX_Text_Bulk, CFieldExchange::SetFieldType

RFX_LongBinary

void RFX_LongBinary( CFieldExchange* pFX , const char* szNam e, CLongBinary&

value );

参 数

pFX

指向 CFieldExchange 类 对 象 的 指 针 。 这 个 对 象 包 含 了 一 些 信 息 , 用 于 定义 函 数 调 用 的 上 下 文 环 境 。 有 关 CFieldExchange 对 象 能 指 定 的 操 作 的 更多 信 息 参 见 “ V isual C++ 程 序 员 指 南 ” 中 的 文 章 “ 记 录 字 段 交 换 : RFX 如 何 工 作 ” 。

szName

数 据 列 的 名 字 。

value

指 定 的 数 据 成 员 所 保 存 的 值 – – – – 要 被 交 换 的 值 。 对 于 从 记 录 集 到 数 据 源的 数 据 传 送 , CLongBinary 类 型 的 值 是 从 指 定 的 数 据 成 员 中 获 得 的 。 对

于 从 数 据 源 到 记 录 集 的 数 据 传 送 , 该 值 保 存 在 指 定 的 数 据 成 员 中 。

说 明

RFX_LongBinary 函 数 在 CRecordset 对 象 的 字 段 数 据 成 员 和 数 据 源 中 记 录 的

SQL_LONGV - ARBINARY 或 SQL_LONGVARCHAR 类 型 的 数 据 列 之 间 传 递

使 用 CLongBinary 类 的 二 进 制 大 对 象 ( BLOB ) 数 据 。

示 例

参 见 “ RFX_Text. ”

请 参 阅 RFX_Text, RFX_Bool, RFX_Long, RFX_Int, RFX_Single, RFX_Double, RFX_Date, RFX_Byte, RFX_Binary, CFieldExchange::SetFieldType, CLongBinary

RFX_ Single

void RFX _ Single ( CFieldExchange* pFX , const char* szNam e , float & value );

参 数

pFX

指向 CFieldExchange 类 对 象 的 指 针 。 这 个 对 象 包 含 了 一 些 信 息 , 用 于 定义 函 数 调 用 的 上 下 文 环 境 。 有 关 CFieldExchange 对 象 能 指 定 的 操 作 的 更多 信 息 参 见 “ V isual C++ 程 序 员 指 南 ” 中 的 文 章 “ 记 录 字 段 交 换 : RFX 如 何 工 作 ” 。

szName

数 据 列 的 名 字 。

value

指 定 的 数 据 成 员 所 保 存 的 值 – – – – 要 被 交 换 的 值 。 对 于 从 记 录 集 到 数 据 源的 数 据 传 送 , float 类 型 的 值 是 从 指 定 的 数 据 成 员 中 获 得 的 。 对 于 从 数 据源 到 记 录 集 的 数 据 传 送 , 该 值 保 存 在 指 定 的 数 据 成 员 中 。

说 明

RFX_Single 函 数 在 CRecordset 对 象 的 字 段 数 据 成 员 和 数 据 源 中 记 录 的

SQL_REAL 型 数 据 列 之 间 交 换 浮 点 数 据 。

示 例

参 见 “ RFX_Text. ”

请 参 阅 RFX_Text, RFX_Bool, RFX_Long, RFX _ In t, RFX_Double, RFX_Date, RFX_Byte, RFX_Binary, RFX_LongBinary, CFieldExchange::SetFieldType

RFX_ Single _Bulk

void RFX _ Single _Bulk( CFieldExchange* pFX , LPCTSTR szNam e, float**

prg Flt Vals , long** prgLengths );

参 数

pFX

指向 CFieldExchange 类 对 象 的 指 针 。 这 个 对 象 包 含 了 一 些 信 息 , 用 于 定义 函 数 调 用 的 上 下 文 环 境 。 有 关 CFieldExchange 对 象 能 指 定 的 操 作 的 更多 信 息 参 见 “ V isual C++ 程 序 员 指 南 ” 中 的 文 章 “ 记 录 字 段 交 换 : RFX 如 何 工 作 ” 。

szName

数 据 列 的 名 字 。

prg Flt Vals

指向 float 数 组 的 指 针 。 这 个 数 组 中 保 存 了 将 要 从 数 据 源 传 送 到 记 录 集 的数 据 。

prgLengths

指 向 长 整 数 数 组 的 指 针 。 这 个 数 组 中 保 存 了 prgFltVals 指 向 的 数 组 中 每个 值 的 以 字 节 为 单 位 的 长 度 。 注 意 如 果 对 应 的 数 据 项 中 是 个 NULL 值 , 那 么 这 个 数 组 中 将 保 存 一 个 SQL_NULL_DATA 值 。 更 多 的 细 节 参 见

“ ODBC SDK 程 序 员 参 考 ” 中 的 ODBC API 函 数 SQLBindCo l。

说 明

RFX_Single_Bulk 函 数 将 ODBC 数 据 源 的 数 据 列 中 的 多 行 浮 点 数 据 传 送 给CRecordset 的 派 生 对 象 中 的 相 应 数 组 。 数 据 源 的 列 必 须 是 SQL_REAL 类 型 的 。记 录 集 必 须 定 义 一 个 float 指 针 型 的 字 段 数 据 成 员 。

如 果 你 把 prgFltValsprgLengths 初 始 化 为 NULL , 那 么 它 们 指 向 的 数 组 将 自动 分 配 , 其 大 小 等 于 行 集 的 大 小 。

注 意 成 组 记 录 字 段 交 换 仅 把 数 据 从 数 据 源 传 送 到 记 录 集 对 象 。 如 果 要使 你 的 记 录 集 可 更 新 , 你 必 须 使 用 ODBC 的 API 函 数 SQLSetPos 。 这 种 做法 的 例 子 参 见 DBFETCH 。

更 多 的 信 息 参 见 “ V isual C++ 程 序 员 指 南 ” 中 的 文 章 “ 记 录 集 : 成 组 获 取 记 录

( ODBC ) ” 和 “ 记 录 字 段 交 换 ( RFX ) ” 。

示 例

参 见 “ RFX_Text_Bulk .”

请 参 阅 RFX_Binary_Bulk, RFX_Bool_Bulk, RFX_Byte_Bulk, RFX_Date_Bulk, RFX _ Double _Bulk, RFX _Int_Bulk, RFX_ Long _Bulk, RFX_Text_Bulk, CFieldExchange::SetFieldType

RFX_ Text

void RFX_Text( CFieldExchange* pFX , const char* szNam e, CString& value , int

nMaxLength = 255, int nColumnType = SQL_VARCHAR, short nScale = 0 );

参 数

pFX

指向 CFieldExchange 类 对 象 的 指 针 。 这 个 对 象 包 含 了 一 些 信 息 , 用 于 定义 函 数 调 用 的 上 下 文 环 境 。 有 关 CFieldExchange 对 象 能 指 定 的 操 作 的 更多 信 息 参 见 “ V isual C++ 程 序 员 指 南 ” 中 的 文 章 “ 记 录 字 段 交 换 : RFX 如 何 工 作 ” 。

szName

数 据 列 的 名 字 。

value

指 定 的 数 据 成 员 所 保 存 的 值 – – – – 要 被 交 换 的 值 。 对 于 从 记 录 集 到 数 据 源的 数 据 传 送 , CString 类 型 的 值 是 从 指 定 的 数 据 成 员 中 获 得 的 。 对 于 从 数据 源 到 记 录 集 的 数 据 传 送 , 该 值 保 存 在 指 定 的 数 据 成 员 中 。

nMaxLength

将 要 被 传 送 的 字 符 串 或 数 组 的 最 大 长 度 。 nMaxLength 的 缺 省 值 是 255 , 合 法 的 值 为 1 到 INT_MAX 。 框 架 会 为 数 据 分 配 这 么 多 内 存 。 为 了 获 得

最 好 的 性 能 , 应 当 传 递 一 个 足 够 大 的 值 , 使 之 能 够 容 纳 你 要 求 的 最 大 的数 据 项 。

nColumnType

主 要 为 参 数 使 用 。 一 个 指 定 了 参 数 类 型 的 整 数 。 参 数 的 类 型 是 ODBC 数据 类 型 SQL_XXX 中 的 一 个 。

nScale

指 定 了 SQL_DECIMAL 或 SQL_NUMERIC 类 型 的 值 的 范 围 。 nScale 只在 设 置 参 数 值 的 时 候 才 有 用 。 更 多 的 信 息 参 见“ ODBC SDK 程 序 员 参 考 ” 的 附 录 D 中 的 文 章 “ 精 度 , 范 围 , 长 度 和 显 示 大 小 ” 。

说 明

RFX_Text 函 数 在 CRecordset 对 象 的 字 段 数 据 成 员 和 数 据 源 中 记 录 的

SQL_LONGVA - RCHAR , SQL_CHAR , SQL_VARCHAR , SQL_DECIMAL 或

SQL_NUMERIC 型 数 据 列 之 间 交 换 CString 数 据 。

示 例

这 个 例 子 演 示 了 几 个 对 RFX_Text 的 调 用 。 注 意 其 中 还 包 括 了 对CFieldExchange::Set- FieldType 的 两 次 调 用 。 通 常 ClassWizard 会 写 入 对SetFieldType 的 第 二 次 调 用 以 及 相 关 的 RFX 调 用 。 你 必 须 自 己 写 入 对SetFieldType 的 第 一 次 调 用 以 及 相 关 的 RFX 调 用 。 我 们 建 议 你 把 参 数 项 放 在

“ //{{AFX_FIELD_MAP ” 注 释 之 外 。 必 须 把 参 数 放 在 注 释 之 外 。

// RFX_Text 的 例 子

void CSections::DoFieldExchange(CFieldExchange* pFX)

{

pFX->SetFieldType(CFieldExchange::inputParam); RFX_Text(pFX, "Name", m_strNameParam);

//{{AFX_FIELD_MAP(CSections)

pFX->SetFieldType(CFieldExchange::outputColumn); RFX_Text(pFX, "CourseID", m_strCourseID); RFX_Text(pFX, "InstructorID", m_strInstructorID); RFX_Int(pFX, "RoomNo", m_nRoomNo); RFX_Text(pFX, "Schedule", m_strSchedule); RFX_Int(pFX, "SectionNo", m_nSectionNo); RFX_Single(pFX, "LabFee", m_flLabFee);

//}}AFX_FIELD_MAP

}

请 参 阅 RFX_Bool, RFX_Long, RFX _ In t, RFX_Single, RFX_Double, RFX_Date, RFX_Byte, RFX_Binary, RFX_LongBinary, CFieldExchange::SetFieldType

RFX_ Tex t_Bulk

void RFX_ Text_Bulk( CFieldExchange* pFX , LPCTSTR szNam e, LPSTR *

prg Str Vals , long** prgLengths , int nMaxLength );

参 数

pFX

指向 CFieldExchange 类 对 象 的 指 针 。 这 个 对 象 包 含 了 一 些 信 息 , 用 于 定义 函 数 调 用 的 上 下 文 环 境 。 有 关 CFieldExchange 对 象 能 指 定 的 操 作 的 更多 信 息 参 见 “ V isual C++ 程 序 员 指 南 ” 中 的 文 章 “ 记 录 字 段 交 换 : RFX 如 何 工 作 ” 。

szName

数 据 列 的 名 字 。

prg Str Vals

指向 LPSTR 数 组 的 指 针 。 这 个 数 组 中 保 存 了 将 要 从 数 据 源 传 送 到 记 录 集的 数 据 。 注 意 在 ODBC 的 当 前 版 本 中 , 这 些 值 不 能 是 Unicode 的。

prgLengths

指 向 长 整 数 数 组 的 指 针 。 这 个 数 组 中 保 存 了 prgFltVals 指 向 的 数 组 中 每个 值 的 以 字 节 为 单 位 的 长 度 。 注 意 如 果 对 应 的 数 据 项 中 是 个 NULL 值 , 那 么 这 个 数 组 中 将 保 存 一 个 SQL_NULL_DATA 值 。 更 多 的 细 节 参 见

“ ODBC SDK 程 序 员 参 考 ” 中 的 ODBC API 函 数 SQLBindCo l。

nMaxLength

prgStrVals 所 指 向 的 数 组 中 所 能 保 存 的 值 的 最 大 长 度 , 包 括 null 结 束 字符 。 为 了 确 保 数 据 不 被 截 断 , 应 当 传 递 一 个 足 够 大 的 值 , 使 之 能 够 容 纳你 要 求 的 最 大 的 数 据 项 。

说 明

RFX_Text_Bulk 函 数 将 ODBC 数 据 源 的 数 据 列 中 的 多 行 字 符 数 据 传 送 给CRecordset 的 派 生 对 象 中 的 相 应 数 组 。 数 据 源 的 列 可 以 是SQL_LONGVARCHAR , SQL_CHAR , SQL_VARCHAR , SQL_DECIMAL 或

SQL_NUMERIC 类 型 的 。 记 录 集 必 须 定 义 一 个 LPSTR 指 针 型 的 字 段 数 据 成 员 。

如 果 你 把 prgStrValsprgLengths 初 始 化 为 NULL , 那 么 它 们 指 向 的 数 组 将 自动 分 配 , 其 大 小 等 于 行 集 的 大 小 。

注 意 成 组 记 录 字 段 交 换 仅 把 数 据 从 数 据 源 传 送 到 记 录 集 对 象 。 如 果 要使 你 的 记 录 集 可 更 新 , 你 必 须 使 用 ODBC 的 API 函 数 SQLSetPos 。 这 种 做法 的 例 子 参 见 DBFETCH 。

更 多 的 信 息 参 见 “ V isual C++ 程 序 员 指 南 ” 中 的 文 章 “ 记 录 集 : 成 组 获 取 记 录

( ODBC ) ” 和 “ 记 录 字 段 交 换 ( RFX ) ” 。

示 例

ClassWizard 不 支 持 Bulk RFX 函 数 , 因 此 你 必 须 手 动 在 DoBulkFieldExchange 函 数 中 写 入 调 用 。 这 个 例 子 演 示 了 对 RFX_Text_Bulk 的 调 用 , 同 时 还 有 对RFX_Long_Bulk 的 调 用 。 这 些 调 用 的 前 面 是 CFieldExchange::SetFieldType。 注意 对 于 参 数 , 你 调 用 RFX 函 数 , 而 不 是 Bulk RFX 函 数 。

void MultiRowSet::DoBulkFieldExchange( CFieldExchange* pFX )

{

pFX->SetFieldType( CFieldExchange::outputColumn ); RFX_Long_Bulk( pFX, _T( "[colRecID]" ),

&m_rgID, &m_rgIDLenghts );

RFX_Text_Bulk( pFX, _T( "[colName]" ),

&m_rgName, &m_rgNameLengths, 30 ); pFX->SetFieldType( CFieldExchange::inputParam ); RFX_Text( pFX, "NameParam", m_strNameParam );

}

请 参 阅 RFX_Binary_Bulk, RFX_Bool_Bulk, RFX_Byte_Bulk, RFX_Date_Bulk, RFX_Double_Bulk, RFX_Int_Bulk, RFX_Long_Bulk, RFX_Single_Bulk , CFieldExchange::SetFieldType

RUNTIME_CLASS

RUNTIME_CLASS( class_name )

参 数

class_name

类 的 实 际 名 字 ( 不 用 引 号 括 起 来 ) 。

说 明

利 用 这 个 宏 通 过 C++ 类 的 名 字 获 得 一 个 运 行 时 类 结 构 。

RUNTIME_CLASS 为 class_name 指 定 的 类 返 回 一 个 指 向 CRuntimeClass 结 构 的指 针 。 只 有 用 DECLARE_DYNAMIC , DECLARE_DYNCREATE 或

DECLARE_SERIAL 定 义 的 CObject 的 派 生 类 才 能 返 回 CRuntimeClass 结 构 指针 。

更 多 的 信 息 参 见 “ Visual C++ 程 序 员 指 南 ” 中 的 “ CObject 类 ” 主 题 。

示 例

// RUNTIME_CLASS 的 例 子

CRuntimeClass* prt = RUNTIME_CLASS( CAge );

ASSERT( lstrcmp( prt->m_lpszClassName, "CAge" ) == 0 );

请 参 阅 DECLARE_DYNAMIC, DECLARE_DYNCREATE,

DECLARE_SERIAL, CObject::GetRuntimeClass, CRuntimeClass

SerializeElements

template< class TYPE > void AFXAPI SerializeElements( CArchive& a r , TYPE* pElements , int nCount );

参 数

TYPE

ar

指 定 了 元 素 类 型 的 模 板 参 数 。

用 来 写 入 存 档 或 读 出 存 档 的 档 案 对 象 。

pElements

指 向 要 被 存 档 的 元 素 的 指 针 。

nCount

要 存 档 的 元 素 的 数 目 。

CArray , CList 和 CMap 调 用 这 个 函 数 以 串 行 化 元 素 。 缺 省 的 实 现 进 行 按 位 读写 。

有 关 这 个 函 数 和 其 它 帮 助 函 数 的 实 现 的 信 息 参 见 “ V isual C++ 程 序 员 指 南 ” 中的 文 章 “ 集 合 : 如 何 生 成 类 型 安 全 的 集 合 ” 。

请 参 阅 CArchive

STATIC_DOWNCAST

STATIC_DOWNCAST( class_name, pobject )

参 数

class_name

类 的 名 字 。

pobject

将 要 被 强 制 转 换 为 class_name 类 型 的 对 象 指 针 的 指 针 。

如 果 在 创 建 你 的 应 用 程 序 时 定 义 了 _DEBUG 预 处 理 符 号 , 这 个 宏 将 把 一 个 对 象指 针 从 一 种 类 型 转 换 为 一 种 相 关 的 类 型 。 如 果 指 针 不 为 NULL , 并 且 指 向 的 对象 不 属 于 目 标 类 型 的 话 , 这 个 宏 将 会 引 起 ASSERT 。

在 没 有 _DEBUG 的 版 本 中 , 这 个 宏 不 作 任 何 检 查 就 进 行 转 换 。

目 标 类 型 由 class_name 参 数 指 定 , 而 pobject 参 数 标 识 了 指 针 。 例 如 , 你 可 能会 通 过 以 下 表 达 式 把 一 个 名 为 pYourDoc 的 CYourDocument 指 针 转 换 为CDocument 指 针 :

CDocument* pDoc = STATIC_DOWNCAST(CDocument, pYourDoc);

如 果 pYourDoc 并 不 指 向 一 个 CDocument 对 象 , 那 么 这 个 宏 将 会 引 起 ASSERT 。

请 参 阅 DYNAMIC_DOWNCAST

THIS_FILE

说 明

这 个 宏 展 开 要 被 编 译 的 文 件 的 名 字 。这 个 信 息 被 ASSERT 和 VERIFY 宏 所 使 用 。

AppWizard 和 ClassWizard 在 它 们 生 成 的 源 代 码 文 件 中 写 入 这 个 宏 。

请 参 阅 ASSERT, VERIFY

THROW( exception_object_pointer )

参 数

exception_object_pointer

指 向 从 CException 继 承 的 异 常 对 象 的 指 针 。

说 明

抛 出 指 定 的 异 常 。 THROW 中 断 程 序 的 运 行 , 将 控 制 权 转 移 到 你 的 程 序 中 相 关的 CATCH 块 。 如 果 你 没 有 提 供 CATCH 块 , 那 么 控 制 权 将 会 转 移 到 微 软 基 础类 库 的 模 块 , 它 打 印 出 一 条 错 误 信 息 , 然 后 退 出 。

更 多 的 信 息 参 见 “ Visual C++ 程 序 员 指 南 ” 中 的 文 章 “ 异 常 ” 。

请 参 阅 THROW_LAST, TRY, CATCH, AND_CATCH, END_CATCH, CATCH_ALL, AND_CATCH_ALL, END_CATCH_ALL,

AfxThrowArchiveException, AfxThrowFileException, AfxThrowMemoryException, AfxThrowNotSupportedExce - ption, AfxThrowResourceException, AfxThrowUserException

THROW_LAST( )

说 明

将 异 常 抛 回 下 一 个 外 部 CATCH 块 。

这 个 宏 使 你 能 够 抛 出 一 个 本 地 产 生 的 异 常 。 如 果 你 试 图 抛 出 一 个 刚 捕 捉 到 的 异常 , 通 常 它 会 越 过 作 用 字 段 并 被 删 除 。 通 过 THROW_LAST , 这 个 异 常 就 可 以被 正 确 地 传 递 给 下 一 个 CATCH 处 理 函 数 。

更 多 的 信 息 参 见 “ Visual C++ 程 序 员 指 南 ” 中 的 文 章 “ 异 常 ” 。

请 参 阅 THROW, TRY, CATCH, AND_CATCH, END_CATCH, CATCH_ALL, AND_CATCH_ALL, END_CATCH_ALL

TRACE

TRACE( exp )

参 数

exp

指 定 了 可 变 数 目 的 参 数 , 它 们 的 使 用 方 式 与 运 行 时 函 数 printf 中 的 可 变数 目 的 参 数 相 同 。

说 明

提 供 了 与 printf 函 数 类 似 的 功 能 , 可 以 向 转 储 设 备 , 例 如 文 件 或 调 试 终 端 发 送格 式 化 字 符 串 。 与 MS-DOS 下 的 C 程 序 中 的 printf 类 似 , TRACE 宏 是 在 程 序指 向 时 跟 踪 变 量 值 的 简 便 方 式 。 在 调 试 环 境 中 , TRACE 宏 的 输 出 发 送 到afxDum p。 在 发 行 环 境 中 , 它 不 做 任 何 操 作 。

TRACE 宏 每 次 最 多 可 以 发 送 512 个 字 符 。 如 果 你 通 过 格 式 化 命 令 调 用 TRACE 宏 , 被 展 开 后 的 格 式 化 命 令 的 字 符 串 总 长 度 不 能 超 过 512 , 包 括 结 尾 的 NULL 字 符 。 超 出 了 这 个 限 制 就 会 引 起 ASSERT 。

注意 这 个 宏 仅 在 MFC 的 调 试 版 本 中 有 效 。

更 多 的 信 息 参 见 “ Visual C++ 程 序 员 指 南 ” 中 的 文 章 “ MFC 调 试 支 持 ” 。

示 例

// TRACE 的 例 子

int i = 1;

char sz[] = "one";

TRACE( "Integer = %d, String = %s\n", i, sz );

// outpu t: 'Integer = 1, String = one'

请 参 阅 TRACE0, TRACE1, TRACE2, TRACE3, AfxDump, afxTraceEnabled

TRACE0

TRACE0( exp )

参 数

exp

与 运 行 时 函 数 printf 中 类 似 的 格 式 字 符 串 。

说 明

TRACE0 与 TRACE 类 似 , 是 一 组 跟 踪 宏 中 的 一 个 形 式 , 可 以 用 它 们 来 产 生 调试 输 出 。 这 组 宏 包 括 :

  • TRACE0

– –

接 收 一 个 格 式 字 符 串 , 可 以 用 于 将 简 单 的 文 本 消

息 转 储 到

afxDum p。

  • TRACE1

– –

接 收 一 个 格 式 字 符 串 和 一 个 参 数 ( 一 个 要 被 转 储 到 afxDump

的 变 量 ) 。

  • TRACE2

– –

接 收 一 个 格 式 字 符 串 和 两 个 参 数 ( 两 个 要 被 转 储 到 afxDump

的 变 量 ) 。

  • TRACE3 – – 接 收 一 个 格 式 字 符 串 和 三 个 参 数 ( 三 个 要 被

    转 储 到 afxDump

的 变 量 ) 。

如 果 你 生 成 了 应 用 程 序 的 发 行 版 本 , TRACE0 不 做 任 何 操 作 。 与 TRACE 一 样 , 它 仅 在 应 用 程 序 的 调 试 版 本 中 才 把 数 据 转 储 到 afxDump 中 。

注意 这 个 宏 仅 在 MFC 的 调 试 版 本 中 有 效 。

示 例

// TRACE0 的 例 子

TRACE0( "Start Dump of MyClass members:" );

请 参 阅 TRACE, TRACE1, TRACE2, TRACE3

TRACE1

TRACE1( exp, param1 )

参 数

exp

与 运 行 时 函 数 printf 中 类 似 的 格 式 字 符 串 。

将 被 转 储 的 变 量 的 名 字 。

说 明

TRACE1 宏 的 描 述 参 见 TRACE0 。

示 例

// TRACE1 的 例 子

int i = 1;

TRACE1( "Integer = %d\n", i );

// outpu t: 'Integer = 1'

TRACE2

TRACE2( exp, param1, param2 )

参 数

exp

与 运 行 时 函 数 printf 中 类 似 的 格 式 字 符 串 。

要 被 转 储 的 变 量 的 名 字 。

param2

要 被 转 储 的 变 量 的 名 字 。

说 明

TRACE2 的 描 述 参 见 TRACE0 。

示 例

// TRACE2 的 例 子

int i = 1;

char sz[] = "one";

TRACE2( "Integer = %d, String = %s\n", i, sz );

// 输 出 : 'Integer = 1, String = one'

TRACE3

TRACE3( exp, param1, param2, param3 )

exp

与 运 行 时 函 数 printf 中 类 似 的 格 式 字 符 串 。

param 1

要 被 转 储 的 变 量 的 名 字 。

param 2

要 被 转 储 的 变 量 的 名 字 。

param 3

要 被 转 储 的 变 量 的 名 字 。

说 明

TRACE3 的 描 述 参 见 TRACE0 。

TRY

TRY

用 这 个 宏 来 建 立 一 个 TRY 块 。 TRY 块 定 义 了 一 块 代 码 , 可 以 抛 出 异 常 。 这 些异 常 将 被 后 面 的 CATCH 和 AND_CATCH 块 处 理 。 允 许 递 归 : 异 常 可 以 被 传递 给 外 部 的 TRY 块 ,只 要 忽 略 它 们 或 是 使 用 THROW_LAST 宏 。用 END_CATCH 或 END_CATCH_ALL 宏 来 结 束 TRY 块 。

更 多 的 信 息 参 见 “ Visual C++ 程 序 员 指 南 ” 中 的 文 章 “ 异 常 ” 。

请 参 阅 CATCH, AND_CATCH, END_CATCH, CATCH_ALL, AND_CATCH_ALL, END_CATCH_ALL, THROW, THROW_LAST

VERIFY

VERIFY( booleanExpression )

参 数

booleanExpression

指 定 了 一 个 表 达 式 ( 包 含 指 针 变 量 ) , 其 计 算 结 果 为 非 零 值 或 0 。

在 MFC 的 调 试 版 本 中 , VERIFY 宏 计 算 它 的 参 数 。 如 果 结 果 是 0 , 这 个 宏 就 打印 出 一 条 消 息 并 中 止 程 序 。 如 果 结 果 为 非 零 值 , 它 就 不 做 任 何 操 作 。

诊 断 消 息 的 形 式 如 下 :

assertion failed in file <name> in line <num>

这 里 的 name 是 源 文 件 的 名 字 , num 是 源 文 件 中 发 生 断 言 失 败 的 位 置 的 行 号 。

在 MFC 的 发 行 版 本 中 , VERIFY 计 算 表 达 式 的 值 , 但 是 并 不 输 出 或 中 断 程 序 。例 如 , 如 果 这 个 表 达 式 是 一 个 函 数 调 用 , 这 个 调 用 会 被 执 行 。

请 参 阅 ASSERT

Class W izard 注 释 分 界 符

为 了 使 ClassWizard 能 够 识 别 用 户 输 入 的 代 码 和 ClassWizard 输 入 的 代 码 , 使 用了 一 些 特 别 的 分 界 符 。 这 些 分 界 符 在 代 码 中 以 注 释 的 形 式 出 现 。 因 此 它 们 不 会被 ClassWizard 以 外 的 任 何 东 西 编 译 和 修 改 。

下 面 是 ClassWizard 的 注 释 分 界 符 的 列 表 。 更 多 的 信 息 参 见 本 章 内 容 。

注 释 分 界 符

AFX_DATA

标 记 着 头 文 件 ( .H ) 中 成 员 变 量 定 义 的 开 始 和 结 束 , 用 于 对 话 框 数 据 交换 ( DDX ) 。

AFX_DATA_INIT

标 记 着 对 话 框 的 构 造 函 数 中 对 话 框 数 据 交 换 ( DDX ) 成 员 变 量 的 初 始 化过 程 的 开 始 和 结 束 。

AFX_DATA_MAP

标 记 着 对 话 框 类 的 DoDataExchange 成 员 函 数 中 对 话 框 数 据 交 换 ( DDX ) 函 数 调 用 的 开 始 和 结 束 。

AFX_DISP

标 记 着 类 的 头 文 件 ( .H ) 中 OLE 自 动 化 声 明 的 开 始 和 结 束 。

AFX_DISP_MAP

标 记 着 类 的 实 现 文 件 ( .CPP ) 中 OLE 自 动 化 映 射 的 开 始 和 结 束 。

AFX_EVENT

标 记 这 类 的 头 文 件 ( .H ) 中 OLE 事 件 声 明 的 开 始 和 结 束 。

AFX_EVENT_MAP

标 记 着 类 的 实 现 文 件 ( .CPP ) 中 OLE 事 件 的 开 始 和 结 束 。

AFX_FIELD

标 记 着 数 据 库 的 记 录 字 段 交 换 ( RFX ) 的 头 文 件 ( .H ) 中 成 员 变 量 定 义的 开 始 和 结 束 。

AFX_FIELD_INIT

标 记 着 记 录 集 类 的 构 造 函 数 中 记 录 字 段 交 换 ( RFX ) 成 员 变 量 初 始 化 过程 的 开 始 和 结 束 。

AFX_FIELD_MAP

标 记 着 记 录 集 类 的 DoFieldExchange 成 员 函 数 中 记 录 字 段 交 换 函 数 调 用的 开 始 和 结 束 。

AFX_MSG

标 记 着 头 文 件 ( .H ) 中 与 消 息 映 射 有 关 的 ClassWizard 入 口 的 开 始 和 结束。

AFX_MSG_MAP

标 记 着 类 的 消 息 映 射 ( 在 .CPP 文 件 中 ) 中 消 息 映 射 入 口 的 开 始 和 结 束 。

AFX_VIRTUAL

标 记 着 类 的 头 文 件 ( .H ) 中 虚 拟 函 数 重 载 声 明 的 开 始 和 结 束 。

AFX_DATA

说 明

ClassWizard 和 AppWizard 在 你 的 源 代 码 文 件 中 插 入 特 别 格 式 的 注 释 分 界 符 以标 明 ClassWizard 可 以 写 入 的 位 置 。 AFX_DATA 被 用 来 标 记 头 文 件 ( .H ) 中 成员 变 量 定 义 的 开 始 和 结 束 , 用 于 对 话 框 数 据 交 换 ( DDX ) :

//{{AFX_DATA(classname)

...

//}}AFX_DATA

更 多 的 信 息 参 见 AFX_DATA_MAP 和 AFX_DATA_INIT 。

AFX_DATA _INIT

说 明

ClassWizard 和 AppWizard 在 你 的 源 代 码 文 件 中 插 入 特 别 格 式 的 注 释 分 界 符 以标 明 ClassWizard 可 以 写 入 的 位 置 。 AFX_DATA_INIT 被 用 来 标 记 对 话 框 类 的构 造 函 数 中 对 话 框 数 据 交 换 ( D D X ) 成 员 变 量 初 始 化 过 程 的 开 始 和 结 束 :

//{{AFX_DATA _INIT (classname)

...

//}}AFX_DATA _INIT

更 多 的 信 息 参 见 AFX_DATA_MAP 和 AFX_DATA _ 。

AFX_DATA _MAP

说 明

ClassWizard 和 AppWizard 在 你 的 源 代 码 文 件 中 插 入 特 别 格 式 的 注 释 分 界 符 以标 明 ClassWizard 可 以 写 入 的 位 置 。 AFX_DATA_MAP 被 用 来 标 记 对 话 框 类 的DoDataExchange 成 员 函 数 中 对 话 框 数 据 交 换 ( DDX ) 函 数 调 用 的 开 始 和 结 束 :

//{{AFX_DATA _MA P (classname)

...

//}}AFX_DATA _MAP

更 多 的 信 息 参 见 AFX_DATA _ INIT 和 AFX_DATA _ 。

AFX_DISP

说 明

ClassWizard 和 AppWizard 在 你 的 源 代 码 文 件 中 插 入 特 别 格 式 的 注 释 分 界 符 以标 明 ClassWizard 可 以 写 入 的 位 置 。 AFX_DISP 被 用 来 标 记 类 的 头 文 件 ( .H ) 中 OLE 自 动 化 声 明 的 开 始 和 结 束 :

//{{AFX_D ISP(classname)

...

//}}AFX_D ISP

更 多 的 信 息 参 见 AFX _ D ISP_MAP 。

AFX_DISP _MAP

说 明

ClassWizard 和 AppWizard 在 你 的 源 代 码 文 件 中 插 入 特 别 格 式 的 注 释 分 界 符 以标 明 ClassWizard 可 以 写 入 的 位 置 。 AFX_DISP_MAP 被 用 来 标 记 类 的 实 现 文 件

( .CPP )中 OLE 自 动 化 映 射 的 开 始 和 结 束 :

//{{AFX_D ISP_MAP (classname)

...

//}}AFX_D ISP_MAP

更 多 的 信 息 参 见 AFX _ D ISP。

AFX_EVENT

说 明

ClassWizard 和 AppWizard 在 你 的 源 代 码 文 件 中 插 入 特 别 格 式 的 注 释 分 界 符 以标 明 ClassWizard 可 以 写 入 的 位 置 。 AFX_EVENT 被 用 来 标 记 类 的 头 文 件 ( .H ) 中 OLE 事 件 声 明 的 开 始 和 结 束 :

//{{AFX_ EVEN T (classname)

...

//}}AFX_EVENT

更 多 的 信 息 参 见 AFX _ EVENT_MAP 。

AFX_EVENT _MAP

说 明

ClassWizard 和 AppWizard 在 你 的 源 代 码 文 件 中 插 入 特 别 格 式 的 注 释 分 界 符 以标 明 ClassWizard 可 以 写 入 的 位 置 。 AFX_EVENT_MAP 被 用 来 标 记 类 的 实 现 文件 ( .CPP ) 中 OLE 事 件 的 开 始 和 结 束 :

//{{AFX_ EVENT_MAP (classname)

...

//}}AFX_ EVENT_MAP

更 多 的 信 息 参 见 AFX _ EVENT 。

AFX_FIELD

说 明

ClassWizard 和 AppWizard 在 你 的 源 代 码 文 件 中 插 入 特 别 格 式 的 注 释 分 界 符 以标 明 ClassWizard 可 以 写 入 的 位 置 。 AFX_FIELD 被 用 来 标 记 类 的 头 文 件 ( .H ) 中 成 员 变 量 声 明 的 开 始 和 结 束 , 用 于 数 据 库 的 记 录 字 段 交 换 ( RFX ):

//{{AFX_ FIELD (classname)

...

//}}AFX_FIELD

更 多 的 信 息 参 见 AFX _ FIELD_MAP 和 AFX_FIELD_INIT 。

AFX_FIELD_INIT

说 明

ClassWizard 和 AppWizard 在 你 的 源 代 码 文 件 中 插 入 特 别 格 式 的 注 释 分 界 符 以标 明 ClassWizard 可 以 写 入 的 位 置 。 AFX_FIELD_INIT 被 用 来 标 记 记 录 集 类 的构 造 函 数 中 记 录 字 段 交 换 ( RFX ) 成 员 变 量 初 始 化 过 程 的 开 始 和 结 束 :

//{{AFX_DATA_FIELD(classname)

...

//}}AFX_DATA_FIELD

更 多 的 信 息 参 见 AFX_FIELD_MAP 和 AFX_FIELD 。

AFX_FIELD _MAP

说 明

ClassWizard 和 AppWizard 在 你 的 源 代 码 文 件 中 插 入 特 别 格 式 的 注 释 分 界 符 以标 明 ClassWizard 可 以 写 入 的 位 置 。 AFX_FIELD_MAP 被 用 来 标 记 记 录 集 类 的DoFieldExchange 成 员 函 数 中 记 录 字 段 交 换 ( RFX ) 函 数 调 用 的 开 始 和 结 束 :

//{{AFX_ FIELD_MAP (classname)

...

//}}AFX_ FIELD_MAP

更 多 的 信 息 参 见 AFX _ FIELD_INIT 和 AFX_FIELD 。

AFX_MSG

说 明

ClassWizard 和 AppWizard 在 你 的 源 代 码 文 件 中 插 入 特 别 格 式 的 注 释 分 界 符 以标 明 ClassWizard 可 以 写 入 的 位 置 。 AFX_MSG 被 用 来 标 记 类 的 头 文 件 ( .H ) 中 与 消 息 映 射 有 关 的 ClassWizard 入 口 的 开 始 和 结 束 :

//{{AFX_ MSG (classname)

...

//}}AFX_MSG

更 多 的 信 息 参 见 AFX _ MSG_MAP 。

AFX_MSG _MAP

说 明

ClassWizard 和 AppWizard 在 你 的 源 代 码 文 件 中 插 入 特 别 格 式 的 注 释 分 界 符 以标 明 ClassWizard 可 以 写 入 的 位 置 。 AFX_MSG_MAP 被 用 来 标 记 类 的 消 息 映 射

( 在 .CPP 文 件 中 ) 中 消 息 映 射 入 口 的 开 始 和 结 束 :

//{{AFX_ MSG_MAP (classname)

...

//}}AFX_ MSG_MAP

更 多 的 信 息 参 见 AFX _ MSG 。

AFX_VIRTUAL

说 明

ClassWizard 和 AppWizard 在 你 的 源 代 码 文 件 中 插 入 特 别 格 式 的 注 释 分 界 符 以标 明 ClassWizard 可 以 写 入 的 位 置 。AFX _ VIRTUAL 被 用 来 标 记 类 的 头 文 件( .H ) 中 虚 拟 函 数 重 载 声 明 的 开 始 和 结 束 :

//{{AFX_ VIRTUA L (classname)

...

//}}AFX_VIRTUAL

这 些 在 .CPP 文 件 中 没 有 对 应 的 内 容 。