C O le DropSource
- 个 COleDropSource 对 象 允 许 将 数 据 拖 动 到 一 个 拖 放 目 标 中
。 类COleDropTarget 处 理 从 拖 放 操 作 中 获 得 的 数 据 。 COleDropSource 对 象 负 责 决 定何 时 开 始 一 次 拖 动 操 作 , 并 在 拖 动 操 作 中 提 供 反 馈 , 并 决 定 何 时 结 束 一 次 拖 动 。
只 要 调 用 相 应 的 构 造 函 数 就 可 以 使 用 一 个 COleDropSource 对 象 。 这 简 化 了 确
定 是 何 种 事 件 的 过 程 , 比 如 一 次 鼠 标 的 点 击 , 用 函 数COleDataSource::DoDragDrop , COleClientItem:: DoDragDrop , 或 者COleServerItem::DoDragDrop 开 始 一 次 拖 动 操 作 。 这 些 函 数 将 为 你 创 建 一 个COleDropSource 对 象 。 你 也 许 希 望 修 改 COleDropSource 可 重 载 函 数 的 缺 省 行为 。 这 些 成 员 函 数 将 在 适 当 的 时 候 由 框 架 来 调 用 。
有 关 使 用 OLE 进 行 拖 放 操 作 的 更 多 信 息 , 参 见 “ Visual C++ 程 序 员 指 南 ” 一 书中 的 “ 拖 放 (OLE )” 。
更 多 的 信 息 , 参 见 “ OLE2 程 序 员 参 考 , 卷 1 ” 中 的 IDropSource 。#include <afxole.h>
CO leDropSource 类 成 员
construction
COleDropSource 构 造 一 个 COleDropSource 对象
Overrid a ble s GiveFeedback 在 拖 放 操 作 中 改 变 光 标
O n B eginDrag 在 拖 动 操 作 中 处 理 鼠 标 的 动 作
QueryContinueDrag 查 看 是 否 可 以 继 续 拖 动
成 员 函 数
CO leDropSource::COleDropSource
COleDropSource();
说 明
构 造 一 个 COleDropSource 对 象 。
请 参 阅 COleDropTarget
CO leDropSource::GiveFeedBack
virtual SCODE GiveFeedback(DROPEFFECT dropEffect );
返 回 值
如 果 拖 动 在 进 行 中 , 则 返 回 DRAGDROP_S_USEDEFAULTCURSOR S , 如 果 不在 进 行 中 则 返 回 NOERROR 。
参 数
dropEffect
你 希 望 显 示 给 用 户 的 效 果 , 它 常 常 表 明 如 果 在 这 一 点 上 放 开 被 选 择 的 数据 将 会 发 生 什 么 。 通 常 来 说 , 它 是 最 近 调 用 的 CView::OnDragEnter 或 者CView::OnDragOver 的 返 回 值 。 它 可 以 是 下 列 值 中 的 一 个 或 几 个 :
-
DROPEFFECT_NONE 不 允 许 放 开 操 作 。
-
DROPEFFECT_COPY 将 执 行 一 次 拷 贝 操 作 。
-
DROPEFFECT_MOVE 将 执 行 一 次 移 动 操 作 。
-
DROPEFFECT_LINK 将 建 立 一 个 从 放 开 的 数 据 到 原 始 数 据 的
链 接 。
-
DROPEFFECT_SCROLL 在 目 标 中 一 次 拖 动 滚 动 条 的 操 作 将 要
发 生或 正 在 发 生 。
说 明
在 调 用 COleDropTarget::OnDragOver 或 者 COleDropTarget::DragEnter 后 由fram e work 调 用 这 个 函 数 。 重 载 这 个 函 数 可 以 向 用 户 提 供 反 馈 , 及 如 果 在 这 点放 开 会 发 生 什 么 。 缺 省 的 实 现 使 用 OLE 缺 省 光 标 。 有 关 使 用 O LE 进 行 拖 放 操作 的 信 息 , 参 见 “ V isual C++ 程 序 员 向 导 ” 一 书 的 文 章 “ 拖 放 (OLE )” 。
更 多 的 信 息 ,参 见“ OLE 2 程 序 员 参 考 ,卷 1 ”中的 IDropSource::GiveFeedback , IDropTarget::DragOver 和 IDropTarget::DragEnte r 。
请 参 阅 CView::OnDragEnter, CView::OnDragOver
CO leDropSource::OnBeginDrag
virtual BOOL OnBeginDrag( CWnd* pWnd );
返 回 值
如 果 允 许 拖 动 则 返 回 非 零 值 , 否 则 返 回 0 。
参 数
pWnd
指 向 包 含 被 选 中 数 据 的 窗 口 的 指 针 。
说 明
当 开 始 拖 动 操 作 的 事 件 ( 如 按 下 鼠 标 左 键 ) 发 生 时 , 由 框 架 调 用 此 函 数 。 如 果你 想 修 改 拖 动 处 理 开 始 的 方 法 , 你 可 以 重 载 这 个 函 数 。 缺 省 的 实 现 监 视 鼠 标 的动 作 并 保 持 在 拖 动 模 式 , 直 到 用 户 点 击 鼠 标 的 左 键 或 右 键 , 或 者 敲 击 ESC 键 , 这 时 它 释 放 鼠 标 。
请 参 阅 COleDropSource::GiveFeedback
CO leDropSource::QueryContinueDrag
virtual SCODE QueryContinueDrag( BOOL bEscapePressed ,DWORD
dwKeyState );
返 回 值
在 拖 动 开 始 之 前 , 如 果 按 下 ESC 键 或 者 鼠 标 右 键 或 放 开 鼠 标 左 键 , 则 返 回
DRAGDROP_S_ CANCEL 。 如 果 要 发 生 一 次 放 开 操 作 则 返 回
DRAGDROP_S_DRO P , 否 则 返 回 S_OK 。
参 数
bEscapePressed
自 最 后 一 次 调 用 COleDropSource::QueryContinueDrag 后 , ESC 键 被 按 下 的状 态 。
dwKeyState
记 录 键 盘 上 的 修 改 键 的 状 态 。 这 是 下 列 任 何 一 个 组 合 : MK_CONTRO L , MK_SHIFT , MK_ALT , MK_LBUTTON , MK_MBUTTON 和MK_RBUTTON 。
说 明
在 拖 动 开 始 后 , 这 个 函 数 被 框 架 重 复 调 用 直 到 拖 动 操 作 被 取 消 或 者 结 束 。 如 果你 想 改 变 拖 动 的 取 消 点 或 发 生 一 次 放 开 操 作 , 你 可 以 重 载 这 个 函 数 。
缺 省 的 实 现 方 式 按 下 面 的 描 述 启 动 放 开 或 取 消 一 次 拖 动 。 当 ESC 键 或 鼠 标 右 键被 按 下 时 , 就 取 消 一 次 拖 动 操 作 。 在 拖 动 开 始 之 后 , 当 鼠 标 左 键 被 放 起 时 , 就启 动 一 次 放 开 操 作 。 否 则 , 此 函 数 返 回 S_OK 并 不 再 执 行 进 一 步 的 操 作 。
由 于 这 个 函 数 被 频 繁 地 调 用 , 所 以 要 尽 可 能 地 对 它 进 行 优 化 。
请 参 阅 COleDropSource::OnBeginDrag , COleDropTarget::OnDrop