宏 、 全 局 函 数 和 全 局 变 量
这 个 部 分 描 述 了 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 ” 替 换 为 lpsz1 和 lpsz2 指 向 的字 符 串 。 新 形 式 的 字 符 串 保 存 在 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 的 模 板 参 数 KEY 和 ARG _ 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 自 动 化 属 性 并 命 名获 取 、 设 置 该 属 性 的 函 数 。
memberGet 和 memberSet 函 数 具 有 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 , hWndParent 和 lpRect 参 数 的 值 时 从 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 , 它 将 被 用 作 该属 性 的 缺 省 值 。 如 果 由 于 某 种 原 因 , 控 件 的 初 始 化 或 串 行 化 过 程 失 败 了 , 就 会使 用 这 个 缺 省 值 。
句 柄 hBlob 和 hBlobDefault 指 向 一 个 内 存 块 , 其 中 包 含 如 下 内 容 :
-
包 含 了 后 面 的 二 进 制 数 据 的 长 度( 以 字 节 为 单 位 ) 的
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 引 用 ) 读 写 。 如 果 指 定了 pFontDesc 和 pFontDispAmbien 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 指 针 型 的 字 段 数 据 成 员 。
如 果 你 把 prgByteVals 和 prgLengths 初 始 化 为 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 指 针 型 的 字 段 数 据 成 员 。
如 果 你 把 prgBoolVals 和 prgLengths 初 始 化 为 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 指 针 型 的 字 段 数 据 成 员 。
如 果 你 把 prgByteVals 和 prgLengths 初 始 化 为 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 指 针 型 的 字 段 数 据 成 员 。
如 果 你 把 prgTSVals 和 prgLengths 初 始 化 为 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 指 针 型 的 字 段 数 据 成 员 。
如 果 你 把 prgDblVals 和 prgLengths 初 始 化 为 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 指 针 型 的 字 段 数 据 成 员 。
如 果 你 把 prgIntVals 和 prgLengths 初 始 化 为 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 指 针 型 的 字 段 数 据 成 员 。
如 果 你 把 prgLongVals 和 prgLengths 初 始 化 为 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 指 针 型 的 字 段 数 据 成 员 。
如 果 你 把 prgFltVals 和 prgLengths 初 始 化 为 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 指 针 型 的 字 段 数 据 成 员 。
如 果 你 把 prgStrVals 和 prgLengths 初 始 化 为 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 类 似 , 是 一 组 跟 踪 宏 中 的 一 个 形 式 , 可 以 用 它 们 来 产 生 调试 输 出 。 这 组 宏 包 括 :
|
– – |
接 收 一 个 格 式 字 符 串 , 可 以 用 于 将 简 单 的 文 本 消 |
息 转 储 到 |
---|---|---|---|
afxDum p。
|
– – |
接 收 一 个 格 式 字 符 串 和 一 个 参 数 ( 一 个 要 被 转 储 到 | afxDump |
的 变 量 ) 。
|
– – |
接 收 一 个 格 式 字 符 串 和 两 个 参 数 ( 两 个 要 被 转 储 到 | 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 文 件 中 没 有 对 应 的 内 容 。