小甲鱼 发表于 2016-11-25 02:57:23

DoDragDrop

注:本文档由 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 函数进入一个循环中调用 IDropSource 和 IDropTarget 接口中的各种方法。(为了成功地实现拖拽操作,所述应用程序作为数据源还必须实现 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::DragOver 和 IDropSource::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)所有,转载请注明来源。

拈花小仙 发表于 2016-11-29 16:50:47

{:7_121:}这个函数的名字好有意思`
页: [1]
查看完整版本: DoDragDrop