DoDragDrop 函数 (ole2.h)
执行 OLE 拖放操作。
HRESULT DoDragDrop(
[in] LPDATAOBJECT pDataObj,
[in] LPDROPSOURCE pDropSource,
[in] DWORD dwOKEffects,
[out] LPDWORD pdwEffect
);
[in] pDataObj
指向包含所拖动数据的数据对象上的 IDataObject 接口的指针。
[in] pDropSource
指向 IDropSource 接口实现的指针,该接口用于在拖动操作期间与源通信。
[in] dwOKEffects
源在 OLE 拖放操作中允许的效果。 最重要的是它是否允许移动。 dwOKEffect 和 pdwEffect 参数从 DROPEFFECT 枚举获取值。 有关值的列表,请参阅 DROPEFFECT。
[out] pdwEffect
指向一个值的指针,该值指示 OLE 拖放操作如何影响源数据。 仅当操作未取消时,才会设置 pdwEffect 参数。
此函数在成功时返回S_OK。 其他可能的值包括以下内容。
返回代码 | 说明 |
---|---|
|
OLE 拖放操作成功。 |
|
OLE 拖放操作已取消。 |
|
出现了意外错误。 |
如果开发的应用程序可以充当 OLE 拖放操作的数据源,则必须在检测到用户已启动 OLE 拖放操作时调用 DoDragDrop 。
DoDragDrop 函数进入一个循环,在其中调用 IDropSource 和 IDropTarget 接口中的各种方法。 (若要成功执行拖放操作,充当数据源的应用程序还必须实现 IDropSource,而目标应用程序必须实现 IDropTarget.)
- DoDragDrop 函数确定当前光标位置下的窗口。 然后,它会检查此窗口是否是有效的放置目标。
- 如果窗口是有效的放置目标, DoDragDrop 将调用 IDropTarget::D ragEnter。 此方法提供一个效果代码,指示如果实际发生删除,会发生什么情况。 有关有效放置效果的列表,请参阅 DROPEFFECT 枚举。
- DoDragDrop 使用效果代码调用 IDropSource::GiveFeedback ,以便放置源接口可以向用户提供适当的视觉反馈。 传递到 DoDragDrop 的 pDropSource 指针指定相应的 IDropSource 接口。
-
DoDragDrop 跟踪鼠标光标移动和键盘或鼠标按钮状态的变化。
- 如果用户移出窗口, DoDragDrop 将调用 IDropTarget::D ragLeave。
- 如果鼠标进入另一个窗口, DoDragDrop 将确定该窗口是否是有效的放置目标,然后为该窗口调用 IDropTarget::D ragEnter 。
- 如果鼠标移动但停留在同一窗口中, DoDragDrop 将调用 IDropTarget::D ragOver。
-
如果键盘或鼠标按钮状态发生更改, DoDragDrop 将调用 IDropSource::QueryContinueDrag ,确定是继续拖动、删除数据还是根据返回值取消操作。
- 如果返回值为 S_OK,DoDragDrop 首先调用 IDropTarget::D ragOver 以继续操作。 此方法返回一个新的效果值, 然后 DoDragDrop 使用新效果调用 IDropSource::GiveFeedback ,以便可以设置适当的视觉反馈。 有关有效放置效果的列表,请参阅 DROPEFFECT 枚举。 IDropTarget::D ragOver 和 IDropSource::GiveFeedback 配对,以便当鼠标在放置目标上移动时,用户将获得有关鼠标位置的最新反馈。
- 如果返回值为 DRAGDROP_S_DROP,DoDragDrop 将调用 IDropTarget::D rop。 DoDragDrop 函数将最后一个效果代码返回到源,因此源应用程序可以对源数据执行相应的操作,例如,如果操作是移动,则剪切数据。
- 如果返回值为 DRAGDROP_S_CANCEL,DoDragDrop 函数将调用 IDropTarget::D ragLeave。
若要支持触摸或笔输入,请勿从触摸处理程序调用 DoDragDrop 。 相反,请从处理程序中为系统在触摸输入时合成的鼠标消息调用 DoDragDrop 。
应用程序可以通过调用 GetMessageExtraInfo 函数来识别合成的消息。 有关使用 GetMessageExtraInfo 区分鼠标输入和 Windows Touch 输入的详细信息,请参阅 应用程序疑难解答。
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 2000 Professional [仅限桌面应用] |
最低受支持的服务器 | Windows 2000 Server [仅限桌面应用] |
目标平台 | Windows |
标头 | ole2.h |
Library | Ole32.lib |
DLL | Ole32.dll |