IDropTarget::DragOver
Provides
target feedback to the user and communicates the drop s effect to the DoDragDrop function so it can
communicate the effect of the drop back to the source.
HRESULT DragOver(
|
DWORD grfKeyState, |
//Current state of keyboard modifier keys |
|
POINTL pt, |
//Pointer to the current cursor coordinates |
|
DWORD * pdwEffect |
//Pointer to the effect of the drag-and-drop
operation |
|
); |
|
Parameters
grfKeyState
[in] Current
state of the keyboard modifier keys on the keyboard. Valid values can be a
combination of any of the flags MK_CONTROL, MK_SHIFT, MK_ALT, MK_BUTTON,
MK_LBUTTON, MK_MBUTTON, and MK_RBUTTON.
pt
[in] Pointer
to the current cursor coordinates in the coordinate space of the drop-target
window.
pdwEffect
[in, out]
Pointer to the current effect flag. Valid values are from the enumeration DROPEFFECT.
Return Values
This method
supports the standard return values E_INVALIDARG, E_OUTOFMEMORY, and
E_UNEXPECTED, as well as the following:
S_OK
The method
completed its task successfully.
Remarks
You do not
call IDropTarget::DragOver directly. The DoDragDrop function calls this method
each time the user moves the mouse across a given target window. DoDragDrop
exits the loop if the drag-and-drop operation is canceled, if the user drags
the mouse out of the target window, or if the drop is completed.
In
implementing IDropTarget::DragOver, you must provide features similar to
those in IDropTarget::DragEnter. You must determine the effect of dropping the data on
the target by examining the FORMATETC defining the data object s formats and medium,
along with the state of the modifier keys. The mouse position may also play a
role in determining the effect of a drop. The following modifier keys affect the
result of the drop:
|
Key
Combination |
User-Visible
Feedback |
Drop
Effect |
|
CTRL + SHIFT |
= |
DROPEFFECT_LINK |
|
CTRL |
+ |
DROPEFFECT_COPY |
|
No keys or SHIFT |
None |
DROPEFFECT_MOVE |
You
communicate the effect of the drop back to the source through DoDragDrop in pdwEffect. The DoDragDrop
function then calls IDropSource::GiveFeedback5ZW3L4 so the source application can display the
appropriate visual feedback to the user.
On entry to IDropTarget::DragOver,
the pdwEffect parameter must be set to the allowed effects passed to the
pdwOkEffect parameter of the DoDragDrop function. The IDropTarget::DragOver
method must be able to choose one of these effects or disable the drop.
Upon return, pdwEffect
is set to one of the members of the DROPEFFECT enumeration. This value is then
passed to the pdwEffect parameter of DoDragDrop. Reasonable values are
DROPEFFECT_COPY to copy the dragged data to the target, DROPEFFECT_LINK to
create a link to the source data, or DROPEFFECT_MOVE to allow the dragged data
to be permanently moved from the source application to the target.
You may also
wish to provide appropriate visual feedback in the target window. There may be
some target feedback already displayed from a previous call to IDropTarget::DragOver
or from the initial IDropTarget::DragEnter. If this feedback is no longer appropriate, you
should remove it.
For
efficiency reasons, a data object is not passed in IDropTarget::DragOver.
The data object passed in the most recent call to IDropTarget::DragEnter
is available and can be used.
When IDropTarget::DragOver
has completed its operation, the DoDragDrop function calls IDropSource::GiveFeedback so the source application
can display the appropriate visual feedback to the user.
Notes to Implementers
This function
is called frequently during the DoDragDrop loop so it makes sense to optimize your
implementation of the DragOver method as much as possible.
See Also