IDropTarget::D ragOver 方法 (oleidl.h)

向用户提供目标反馈,并将放置效果传达给 DoDragDrop 函数,以便它可以将拖放的效果传回源。

语法

HRESULT DragOver(
  [in]      DWORD  grfKeyState,
  [in]      POINTL pt,
  [in, out] DWORD  *pdwEffect
);

参数

[in] grfKeyState

键盘上键盘修饰键的当前状态。 有效值可以是以下标志的任意组合:MK_CONTROL、MK_SHIFT、MK_ALT、MK_BUTTON、MK_LBUTTON、MK_MBUTTON 和 MK_RBUTTON。

[in] pt

一个 POINTL 结构,包含屏幕坐标中的当前光标坐标。

[in, out] pdwEffect

输入时,指针指向 DoDragDrop 函数的 pdwEffect 参数的值。 返回时,必须包含 DROPEFFECT 标志之一,该标志指示放置操作的结果。

返回值

此方法在成功时返回S_OK。 其他可能的值包括以下内容。

返回代码 说明
E_UNEXPECTED
发生意外错误。
E_INVALIDARG
pdwEffect 值无效。
E_OUTOFMEMORY
此操作的可用内存不足。

注解

不直接调用 DragOver 。 每次用户将鼠标移动到给定目标窗口时, DoDragDrop 函数都会调用此方法。 如果拖放操作被取消、用户将鼠标拖出目标窗口或放置完成,DoDragDrop 将退出循环。

在实现 IDropTarget::D ragOver 时,必须提供类似于 IDropTarget::D ragEnter 中的功能。 必须通过检查 FORMATETC (定义数据对象的格式和介质)以及修饰键的状态来确定删除目标数据的效果。 鼠标位置也可能在确定放置效果方面发挥作用。 以下修饰键会影响放置结果。

键组合 User-Visible 反馈 删除效果
CTRL + SHIFT = DROPEFFECT_LINK
Ctrl + DROPEFFECT_COPY
无键或 SHIFT DROPEFFECT_MOVE
 

通过 pdwEffect 中的 DoDragDrop 将拖放的效果传达回源。 然后,DoDragDrop 函数调用 IDropSource::GiveFeedback,以便源应用程序可以向用户显示适当的视觉反馈。

在输入 IDropTarget::D ragOver 时,必须将 pdwEffect 参数设置为传递给 DoDragDrop 函数的 pdwOkEffect 参数的允许效果。 IDropTarget::D ragOver 方法必须能够选择这些效果之一或禁用删除。

返回后, pdwEffect 设置为 DROPEFFECT 标志之一。 然后,此值将传递给 DoDragDroppdwEffect 参数。 合理值DROPEFFECT_COPY将拖动的数据复制到目标,DROPEFFECT_LINK创建指向源数据的链接,或DROPEFFECT_MOVE以允许拖动的数据从源应用程序永久移动到目标。

你可能还希望在目标窗口中提供适当的视觉反馈。 以前对 IDropTarget::D ragOver 的调用或初始 IDropTarget::D ragEnter 中可能已显示一些目标反馈。 如果此反馈不再合适,则应将其删除。

出于效率原因,不会在 IDropTarget::D ragOver 中传递数据对象。 在最近一次调用 IDropTarget::D ragEnter 中传递的数据对象可用且可以使用。

IDropTarget::D ragOver 完成其操作时, DoDragDrop 函数会调用 IDropSource::GiveFeedback ,以便源应用程序可以向用户显示相应的视觉反馈。

实施者说明

DoDragDrop 循环期间经常调用此函数,因此尽可能多地优化 DragOver 方法的实现是有意义的。

要求

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

另请参阅

DoDragDrop

IDropSource

IDropSourceNotify

IDropTarget

RegisterDragDrop

RevokeDragDrop