DoDragDrop 函数 (ole2.h)

执行 OLE 拖放操作。

注意 在调用此函数之前,必须调用 OleInitialize
 

语法

HRESULT DoDragDrop(
  [in]  LPDATAOBJECT pDataObj,
  [in]  LPDROPSOURCE pDropSource,
  [in]  DWORD        dwOKEffects,
  [out] LPDWORD      pdwEffect
);

参数

[in] pDataObj

指向包含所拖动数据的数据对象上的 IDataObject 接口的指针。

[in] pDropSource

指向 IDropSource 接口实现的指针,该接口用于在拖动操作期间与源通信。

[in] dwOKEffects

源在 OLE 拖放操作中允许的效果。 最重要的是它是否允许移动。 dwOKEffectpdwEffect 参数从 DROPEFFECT 枚举获取值。 有关值的列表,请参阅 DROPEFFECT

[out] 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::D ragEnter。 此方法提供一个效果代码,指示如果实际发生删除,会发生什么情况。 有关有效放置效果的列表,请参阅 DROPEFFECT 枚举。
  3. DoDragDrop 使用效果代码调用 IDropSource::GiveFeedback ,以便放置源接口可以向用户提供适当的视觉反馈。 传递到 DoDragDroppDropSource 指针指定相应的 IDropSource 接口。
  4. DoDragDrop 跟踪鼠标光标移动和键盘或鼠标按钮状态的变化。
  5. 如果键盘或鼠标按钮状态发生更改, DoDragDrop 将调用 IDropSource::QueryContinueDrag ,确定是继续拖动、删除数据还是根据返回值取消操作。
    • 如果返回值为 S_OK,DoDragDrop 首先调用 IDropTarget::D ragOver 以继续操作。 此方法返回一个新的效果值, 然后 DoDragDrop 使用新效果调用 IDropSource::GiveFeedback ,以便可以设置适当的视觉反馈。 有关有效放置效果的列表,请参阅 DROPEFFECT 枚举。 IDropTarget::D ragOverIDropSource::GiveFeedback 配对,以便当鼠标在放置目标上移动时,用户将获得有关鼠标位置的最新反馈。
    • 如果返回值为 DRAGDROP_S_DROP,DoDragDrop 将调用 IDropTarget::D ropDoDragDrop 函数将最后一个效果代码返回到源,因此源应用程序可以对源数据执行相应的操作,例如,如果操作是移动,则剪切数据。
    • 如果返回值为 DRAGDROP_S_CANCEL,DoDragDrop 函数将调用 IDropTarget::D ragLeave
处理触摸或笔输入时,DoDragDrop 不支持调用拖放支持。

若要支持触摸或笔输入,请勿从触摸处理程序调用 DoDragDrop 。 相反,请从处理程序中为系统在触摸输入时合成的鼠标消息调用 DoDragDrop

应用程序可以通过调用 GetMessageExtraInfo 函数来识别合成的消息。 有关使用 GetMessageExtraInfo 区分鼠标输入和 Windows Touch 输入的详细信息,请参阅 应用程序疑难解答

要求

要求
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows
标头 ole2.h
Library Ole32.lib
DLL Ole32.dll

另请参阅

IDropSource