C O le DropTarget
- 个 COleDropTarget 对 象 提 供 窗 口 与 OLE 库 之 间 的 通 讯 机 制
。 创 建 这 个 类 的对 象 之 后 , 窗 口 就 可 以 通 过 OLE 拖 放 机 制 接 收 数 据 。
为 了 使 一 个 窗 口 能 够 接 收 拖 放 来 的 命 令 , 就 必 须 首 先 创 建 一 个 COleDropTarget
类 对 象 , 然 后 调 用 Register 函 数 , 该 函 数 只 有 一 个 参 数 , 该 参 数 是 一 个 指 向 所
需 要 的 CWnd 对 象 的 指 针 。
有 关 使 用 OLE 进 行 拖 放 操 作 的 更 多 信 息 , 参 见 “ Visual C++ 程 序 员 指 南 ” 一 书中 的 文 章 “ 拖 放 (OLE )” 。
#include <afxole.h>
请 参 阅 COleDropSource
CO leDropTarget 类 成 员
Contstruction
ColeDropTarget 构 造 一 个 COleDropTarget 对 象
Operation s Register 将 一 个 窗 口 注 册 为 一 个 有 效 的 拖 放 目 标
Revoke 使 窗 口 不 再 是 一 个 有 效 的 拖 放 目 标
Overridable s OnDragEnter 当 光 标 第 一 次 进 入 窗 口 时 被 调 用
OnDragLeave 当 光 标 被 拖 动 出 窗 口 时 被 调 用
OnDragOver 当 光 标 在 窗 口 中 拖 动 时 被 重 复 调 用OnDragScroll 用 来 确 定 光 标 是 否 被 拖 进 了 窗 口 的 滚 动 条 区 域OnDrop 当 数 据 被 放 在 窗 口 中 时 被 调 用 , 缺 省 的 处 理
OnDropEx 当 数 据 被 放 在 窗 口 中 时 被 调 用 , 最 初 的 处 理
成 员 函 数
CO leDropTarget::COleDropTarget
COleDropTarget();
说 明
构 造 一 个 COleDropTarget 类 对 象 。调 用 Register 来 使 这 个 对 象 与 窗 口 产 生 联 系 。
请 参 阅 COleDropSource , COleDropTarget::Registe r, COleDropTarget::Revoke
CO leDropTarget::OnDragEnter
virtual DROPEFFECT OnDragEnter( CWnd* pWnd ,COleDataObject* pDataObject , DWORD dwKeyState ,CPoint point );
返 回 值
如 果 在 point 指 定 的 位 置 尝 试 放 开 会 产 生 的 影 响 。 它 可 以 是 下 列 中 的 一 个 或 几个 :
-
DROPEFFECT_NONE 不 允 许 进 行 一 次 放 开 。
-
DROPEFFECT_COPY 将 执 行 一 次 拷 贝 操 作 。
-
DROPEFFECT_MOVE 将 执 行 一 次 移 动 操 作 。
-
DROPEFFECT_LINK 将 建 立 一 个 从 被 放 开 的 数 据 到 原 始 数 据
的 链 接 。
-
DROPEFFECT_SCROLL 在 目 标 中 已 发 生 或 将 要 发 生 一 次 拖 动
滚 动 条 的操 作 。
参 数
pWnd
指 向 光 标 正 进 入 的 窗 口 。
pDataObject
指 向 包 含 可 以 放 开 的 数 据 的 数 据 对 象 。
dwKeyState
包 含 修 饰 键 的 状 态 。 是 下 列 的 一 些 组 合 : MK_CONTROL , MK_SHIFT ,
MK_ALT , MK_LBUTTON , MK_MBUTTON 和 M K _ R BUTTON 。
point
记 录 光 标 在 客 户 坐 标 系 中 的 当 前 位 置 。
说 明
当 光 标 首 次 被 拖 入 窗 口 时 由 应 用 框 架 调 用 。 重 载 这 个 函 数 可 以 使 得 在 窗 口 中 可以 进 行 放 开 操 作 。 缺 省 的 实 现 调 用 了 CView::OnDragEnter, 它 只 是 简 单 地 缺 省返 回 DROPEFFECT_ N O N E 。
更 多 的 信 息 请 参 见 “ OLE 2 程 序 员 参 考 , 卷 1 ” 中 的 IDropTarget::DragEnter。
请 参 阅 COleDropTarget::OnDragOver, COleDropTarget::OnDragLeave, COleDropTarget::OnDrop , COleDropTarget::OnDropEx ,
CView::OnDragEnter
CO leDropTarget::OnDragLeave
virtual void OnDragLeave( CWnd* pWnd );
参 数
pWnd
指 向 光 标 正 离 开 的 窗 口 。
说 明
当 一 次 拖 动 操 作 正 在 起 作 用 , 同 时 光 标 正 离 开 窗 口 时 , 由 应 用 框 架 调 用 。 当 拖动 操 作 离 开 指 定 的 窗 口 时 , 如 果 你 想 有 一 些 特 别 的 动 作 , 请 你 重 载 这 个 函 数 。这 个 函 数 的 缺 省 实 现 调 用 了 CView::OnDragLeave 。
更 多 的 信 息 请 参 见 “ OLE 2 程 序 员 参 考 , 卷 1 ” 中 的 IDropTarget::DragEnter。
请 参 阅 COleDropTarget::OnDragEnte r, COleDropTarget::OnDragOve r,
COleDropTarget::OnDrop , COleDropTarget::OnDropEx
CO leDropTarget::OnDragOver
virtual DROPEFFECT OnDragOver( CWnd* pWnd , COleDataObject*
pDataObject ,
DWORD dwKeyState , CPoint point );
返 回 值
返 回 如 果 在 point 指 定 的 位 置 尝 试 放 开 会 产 生 的 影 响 。 它 可 以 是 下 列 中 的 一 个或 几 个 :
-
DROPEFFECT_NONE 不 允 许 进 行 一 次 放 开 。
-
DROPEFFECT_COPY 将 执 行 一 次 拷 贝 操 作 。
-
DROPEFFECT_MOVE 将 执 行 一 次 移 动 操 作 。
-
DROPEFFECT_LINK 将 建 立 一 个 从 放 开 的 数 据 到 原 始 数 据 的
链 接 。
-
DROPEFFECT_SCROLL 在 目 标 中 已 发 生 或 将 要 发 生 一 次 拖 动
滚 动 条 的操 作 。
参 数
pWnd
指 向 光 标 正 通 过 的 窗 口 。
pDataObject
指 向 包 含 可 以 放 开 的 数 据 的 数 据 对 象 。
dwKeyState
包 含 修 饰 键 的 状 态 。 这 是 下 列 的 一 些 组 合 :MK_CONTRO L,MK_SHIFT ,
MK_ALT , MK_LBUTTON , MK_MBUTTON 和 MK_RBUTTON 。
point
记 录 光 标 在 客 户 坐 标 系 中 的 当 前 位 置 。
说 明
当 光 标 通 过 窗 口 时 由 应 用 框 架 调 用 。 为 了 能 够 在 窗 口 中 进 行 放 开 操 作 , 你 必 须重 载 这 个 函 数 。 这 个 函 数 的 缺 省 实 现 调 用 了 CView::OnDragOver, 它 缺 省 地 返回 DROPEFFECT_ NONE 。 由 于 这 个 函 数 被 频 繁 地 调 用 , 所 以 最 好 能 够 尽 可 能的 对 它 进 行 优 化 。
更 多 的 信 息 请 参 见 “ OLE 2 程 序 员 参 考 , 卷 1 ” 中 的 IDropTarget::DragOve r。
请 参 阅 COleDropTarget::OnDragEnte r, COleDropTarget::OnDragLeave, COleDropTarget::OnDrop , COleDropTarget::OnDropEx
CO leDropTarget::OnDragScroll
virtual DROPEFFECT OnDragScroll( CWnd* pWnd ,DWORD dwKeyState ,CPoint
point );
返 回 值
如 果 在 point 指 定 的 位 置 尝 试 放 开 会 产 生 的 影 响 。 它 可 以 是 下 列 中 的 一 个 或 几个 :
-
DROPEFFECT_NONE 不 允 许 进 行 一 次 放 开 。
-
DROPEFFECT_COPY 将 执 行 一 次 拷 贝 操 作 。
-
DROPEFFECT_MOVE 将 执 行 一 次 移 动 操 作 。
-
DROPEFFECT_LINK 将 建 立 一 个 从 放 开 的 数 据 到 原 始 数 据 的
链 接 。
-
DROPEFFECT_SCROLL 在 目 标 中 已 发 生 或 将 要 发 生 一 次 拖 动
滚 动 条 的
操 作 。
参 数
pWnd
指 向 光 标 正 通 过 的 窗 口 。
dwKeyState
包 含 修 饰 键 的 状 态 。 这 是 下 列 的 一 些 组 合 :MK_CONTRO L,MK_SHIFT ,
MK_ALT , MK_LBUTTON , MK_MBUTTON 和 MK_RBUTTON 。
point
以 像 素 为 单 位 记 录 光 标 在 屏 幕 上 的 相 对 位 置 。
说 明
在 调 用 OnDragEnter 或者 OnDragOver 之 前 由 框 架 调 用 , 用 来 确 定 point 指 定 的
位 置 是 否 在 滚 动 条 区 域 内 。 当 你 希 望 这 个 事 件 具 有 特 别 的 行 为 时 , 请 重 载 这 个函 数 。 这 个 函 数 的 缺 省 实 现 调 用 了 CView::OnDragScroll , 它 返 回DROPEFFECT_NONE , 并 且 当 光 标 进 入 窗 口 边 界 内 的 缺 省 滚 动 条 区 域 时 滚 动窗 口 。
CO leDropTarget::OnDrop
virtual BOOL OnDrop( CWnd* pWnd , COleDataObject* pDateObject ,
DROPEFFECT dropEffec t, CPoint point );
返 回 值
如 果 放 开 成 功 则 返 回 非 零 值 ; 否 则 返 回 0 。
pWnd
指 向 光 标 正 通 过 的 窗 口 。
pDataObject
指 向 包 含 可 以 放 开 的 数 据 的 数 据 对 象 。
dropEffect
是 用 户 为 放 开 操 作 选 择 的 效 果 。 它 可 以 是 下 列 中 的 一 个 或 几 个 :
-
DROPEFFECT_COPY 将 执 行 一 次 拷 贝 操 作 。
-
DROPEFFECT_MOVE 将 执 行 一 次 移 动 操 作 。
-
DROPEFFECT_LINK 将 建 立 一 个 从 放 开 的 数 据 到 原 始 数 据 的
链 接 。
point
以 像 素 为 单 位 记 录 光 标 在 屏 幕 中 的 相 对 位 置 。
当 一 次 放 开 操 作 将 要 发 生 时 由 框 架 调 用 。 框 架 首 先 调 用 OnDropEx 。 如 果OnDropEx 函 数 并 不 处 理 放 开 操 作 , 则 框 架 就 接 着 调 用 成 员 函 数 OnDrop 。 一 般来 说 , 应 用 程 序 要 在 视 类 中 重 载 OnDropE x, 以 能 处 理 鼠 标 右 键 的 拖 放 操 作 。视 类 中 的 OnDrop 常 常 是 用 来 处 理 简 单 的 拖 放 的 。
COleDropTarget::OnDrop 的 缺 省 实 现 调 用 了 CView::OnDrop , 它 只 是 简 单 的 返回 缺 省 值 FALSE 。
更 多 的 信 息 , 参 见 “ OLE 2 程 序 员 参 考 , 卷 1 ” 中 的 IDropTarget::Drop 。
请 参 阅 COleDropTarget::OnDragOver, COleDropTarget::OnDragEnte r, COleDropTarget::OnDropEx
CO leDropTarget::OnDropEx
virtual DROPEFFECT OnDropEx( CWnd* pWnd , COleDataObject* pDataObjec t,
DROPEFFECT dropDefault , DROPEFFECT dropList , CPoint point );
返 回 值
返 回 当 在 point 指 定 的 位 置 进 行 放 开 操 作 时 产 生 的 效 果 。 放 开 操 作 的 影 响 将 在说 明 部 分 进 行 讨 论 。
参 数
pWnd
指 向 光 标 正 通 过 的 窗 口 。
pDataObject
指 向 包 含 可 以 放 开 数 据 的 数 据 对 象 。
dropDefault
用 户 选 择 的 缺 省 放 开 操 作 的 效 果 与 当 前 的 按 键 的 状 态 有 关 。 它 可 以 是
DROPEFFECT_ NONE 。 放 开 操 作 的 影 响 将 在 书 面 部 分 中 进 行 讨 论 。
dropList
放 开 操 作 的 数 据 源 支 持 的 效 果 列 表 。 放 开 操 作 的 效 果 值 可 以 是 用 按 位 的或 ( |) 操 作 来 进 行 组 合 。 放 开 操 作 的 影 响 将 在 书 面 部 分 进 行 讨 论 。
point
以 像 素 为 单 位 记 录 光 标 在 屏 幕 中 的 相 对 位 置 。
说 明
当 要 发 生 一 次 放 开 操 作 的 时 候 有 框 架 调 用 。 框 架 首 先 调 用 这 个 参 数 。 如 果 它 不处 理 这 次 放 开 操 作 , 则 框 架 接 着 就 调 用 OnDrop 。 通 常 , 为 了 支 持 鼠 标 右 键 的拖 放 , 你 需 要 重 载 这 个 函 数 。 一 般 来 说 , 视 类 的 OnDrop 是 用 来 处 理 简 单 的 拖
放 操 作 的 。
COleDropTarget::OnDropEx 的 缺 省 实 现 调 用 了 CView::OnDropEx 。 缺 省 的 ,
CView:: OnDropEx 只 简 单 地 返 回 一 个 空 值 来 表 明 必 须 调 用 OnDrop 成 员 函 数 。放 开 效 果 描 述 了 与 放 开 操 作 相 关 的 动 作 。 下 面 是 放 开 效 果 的 列 表 :
-
DROPEFFECT_NONE 不 允 许 放 开 操 作 。
-
DROPEFFECT_COPY 将 执 行 一 次 拷 贝 操 作 。
-
DROPEFFECT_MOVE 将 执 行 一 次 移 动 操 作 。
-
DROPEFFECT_LINK 将 建 立 一 个 从 被 放 开 的 数 据 到 原 始 数 据
的 链 接 。
-
DROPEFFECT_SCROLL 标 识 在 目 标 中 将 发 生 或 正 在 发 生 一 次
拖 动 滚 动条 的 操 作 。
更 多 的 信 息 , 请 参 见 “ OLE 2 程 序 员 参 考 , 卷 1 ” 中 的 IDropTarget::Drop 。
请 参 阅 COleDropTarget::OnDragOve r, COleDropTarget::OnDragEnter
CO leDropTarget::Register BOOL Register( CWnd* pWnd ); 返 回 值
如 果 注 册 成 功 则 返 回 非 零 值 ; 否 则 返 回 0 。
参 数
pWnd
指 向 一 个 要 被 注 册 为 放 开 目 标 的 窗 口 。
说 明
调 用 这 个 函 数 可 以 以 OLE DLL 将 你 的 窗 口 注 册 为 一 个 有 效 的 放 开 目 标 。
如 果 要 获 取 更 多 的 信 息 , 请 参 见 “ OLE 2 程 序 员 参 考 , 卷 1 ” 中 的
RegisterDragDrop。
请 参 阅 COleDropTarget::Revoke, COleDropTarget::COleDropTarget
CO leDropTarget::Revoke
virtual void Revoke();
说 明
在 销 毁 任 何 一 个 已 用 COleDropTarget::Register 调 用 注 册 为 放 开 目 标 的 窗 口 之前 , 调 用 Revoke 函 数 将 该 窗 口 从 放 开 目 标 列 表 中 删 掉 。 此 函 数 在 被 注 册 窗 口的 OnDestroy 处 理 函 数 中 自 动 被 调 用 , 通 常 不 需 要 显 式 地 调 用 这 个 函 数 。
为 了 获 取 更 多 的 信 息 , 参 见“ OLE 2 程 序 员 参 考 , 卷 1 ” 中 的 RevokeDragDrop 。