# DROPEFFECT

The DoDragDrop function and many of the methods in the IDropSource and IDropTarget interfaces pass information about the effects of a drag-and-drop operation in a DROPEFFECT enumeration.

Valid drop-effect values are the result of applying the OR operation to the values contained in the DROPEFFECT enumeration:

    typedef enum tagDROPEFFECT
    {
        DROPEFFECT_NONE   = 0,
        DROPEFFECT_COPY   = 1,
        DROPEFFECT_MOVE   = 2,
        DROPEFFECT_LINK   = 4,
        DROPEFFECT_SCROLL = 0x80000000
    }DROPEFFECT;

These values have the following meaning:

DROPEFFECT name | Value | Description
DROPEFFECT_NONE | 0 | Drop target cannot accept the data.
DROPEFFECT_COPY | 1 | Drop results in a copy. The original data is untouched by the drag source.
DROPEFFECT_MOVE | 2 | Drag source should remove the data.
DROPEFFECT_LINK | 4 | Drag source should create a link to the original data.
DROPEFFECT_SCROLL | 0x80000000 | Scrolling is about to start or is currently occurring in the target. This value is used in addition to the other values.

Note Your application should always mask values from the DROPEFFECT enumeration to ensure compatibility with future implementations. Presently, only four of the 32-bit positions in a DROPEFFECT have meaning. In the future, more interpretations for the bits will be added. Drag sources and drop targets should carefully mask these values appropriately before comparing. They should never compare a DROPEFFECT against, say, DROPEFFECT_COPY by:

    if (dwDropEffect == DROPEFFECT_COPY)...

Instead, the application should always mask for the value or values being sought:

    if (dwDropEffect & DROPEFFECT_COPY) == DROPEFFECT_COPY)...

or

    if (dwDropEffect & DROPEFFECT_COPY)...

This allows for the definition of new drop effects, while preserving backwards compatibility with existing code.

See Also

DoDragDrop, IDropSource, IDropTarget