鱼C论坛

 找回密码
 立即注册
查看: 5092|回复: 1

[API档案] DoDragDrop

[复制链接]
发表于 2016-11-25 02:57:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
注:本文档由 TOP_LK 翻译,小甲鱼校对。

原文链接 -> 传送门

函数功能:

DoDragDrop 函数用于执行一个 OLE 对象的拖放操作。

注意:在调用该函数之前你必须先调用 OleInitialize 函数。


API 函数原型:
HRESULT DoDragDrop(
  _In_  LPDATAOBJECT pDataObj,
  _In_  LPDROPSOURCE pDropSource,
  _In_  DWORD        dwOKEffects,
  _Out_ LPDWORD      pdwEffect
);

参数解析:

参数 含义
pDataObj 一个指向 IDataObject 接口上的数据对象的指针,其包含被拖动的数据
pDropSource 该指针指向 IDropSource 接口的实现,它是用来拖动操作期间与源头的交流
dwOKEffects 其指向 OLE 拖放操作期间源允许的效果。最重要的是它是否允许移动。pdwEffect 和 dwOKEffect 参数从 DROPEFFECT 枚举取值。对于值的列表,请参阅 DROPEFFECT
pdwEffect 该指针的值表明 OLE 拖放操作如何影响源数据。 pdwEffect 参数仅当操作没有被取消时设置


返回值:

此函数成功时返回 S_OK,其他可能的值如下所示:

返回代码 描述
DRAGDROP_S_DROP 当 OLE 拖放操作是成功的
DRAGDROP_S_CANCEL 当 OLE 拖放操作被取消
E_UNSPEC 当发生意外错误


备注:

如果你正在开发一个应用程序,并且该应用程序支持数据源的 OLE 拖放操作,当你发现用户已经开始 OLE 拖放操作时,你必须调用 DoDragDrop 函数。

DoDragDrop 函数进入一个循环中调用 IDropSourceIDropTarget 接口中的各种方法。(为了成功地实现拖拽操作,所述应用程序作为数据源还必须实现 IDropSource ,而目标应用程序必须实现 IDropTarget。)

1. DoDragDrop 函数决定了在当前光标位置的窗口,然后检查是否该窗口是一个有效的拖放目标。

2. 如果窗口是一个有效的拖放目标,DoDragDrop 会调用 IDropTarget::DragEnter。该方法会提供效果代码指示将会发生什么如果拖放操作实际发生了。有关有效拖放效果的列表 , 请参见 DROPEFFECT 枚举。

3. DoDragDrop 函数使用效果代码调用 IDropSource:GiveFeedback,以便拖放源接口可以提供适当的视觉反馈给用户。pDropSource 指针传递给 DoDragDrop 指定适当的 IDropSource 接口。

4. DoDragDrop 函数跟踪鼠标的光标移动和键盘的改变或鼠标按钮的状态:
  • 如果用户移出了窗口, DoDragDrop 函数调用 IDropTarget::DragLeave
  • 如果鼠标进入另一个窗口, DoDragDrop 函数决定了该窗口是否是一个有效的拖放目标,并且会为该窗口调用 IDropTarget::DragEnter
  • 如果鼠标移动,但保持在同一个窗口中, DoDragDrop 函数调用 IDropTarget::DragOver

5. 如果键盘或鼠标按钮状态有变化, DoDragDrop 函数会调用 IDropSource::QueryContinueDrag,并根据返回值确定是否继续进行拖动,或丢弃数据,或者取消操作:
  • 如果返回值是 S_OK , DoDragDrop 函数首先会调用 IDropTarget::DragOver 来继续操作。该方法返回一个新的效果值并且 DoDragDrop 函数会用该值调用 IDropSource::GiveFeedback 来提供适当的视觉反馈。有关有效拖放效果的列表,请参见 DROPEFFECT 枚举。IDropTarget::DragOverIDropSource::GiveFeedback 是一对当鼠标移过拖放目标,为用户提供最新的鼠标位置的反馈
  • 如果返回值是 DRAGDROP_S_DROP , DoDragDrop 函数会调用 IDropTarget::Drop。DoDragDrop 函数返回最后的效果代码给源,这样源应用程序就能可以在源数据执行适当的操作,例如,如果操作是移动的话,就切断数据
  • 如果返回值是 DRAGDROP_S_CANCEL ,DoDragDrop 函数会调用 IDropTarget::DropLeave


需求:

Minimum supported client Windows 2000 专业版 [仅桌面应用程序]
Minimum supported server Windows 2000 服务器版 [仅桌面应用程序]
Header Ole2.h
Library Ole32.lib
DLL Ole32.dll


【API档案】版权归鱼C工作室(www.fishc.com)所有,转载请注明来源。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-11-29 16:50:47 | 显示全部楼层
这个函数的名字好有意思`
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-18 02:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表