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。 其他可能的值包括以下内容。
返回代码 | 说明 |
---|---|
|
发生意外错误。 |
|
pdwEffect 值无效。 |
|
此操作的可用内存不足。 |
注解
不直接调用 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 标志之一。 然后,此值将传递给 DoDragDrop 的 pdwEffect 参数。 合理值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 |