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)所有,转载请注明来源。
{:7_121:}这个函数的名字好有意思`
页:
[1]