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 。