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