RegisterDragDrop function (ole2.h)

Registers the specified window as one that can be the target of an OLE drag-and-drop operation and specifies the IDropTarget instance to use for drop operations.


HRESULT RegisterDragDrop(
  [in] HWND         hwnd,
  [in] LPDROPTARGET pDropTarget


[in] hwnd

Handle to a window that can be a target for an OLE drag-and-drop operation.

[in] pDropTarget

Pointer to the IDropTarget interface on the object that is to be the target of a drag-and-drop operation in a specified window. This interface is used to communicate OLE drag-and-drop information for that window.

Return value

This function returns S_OK on success. Other possible values include the following.

Return code Description
Invalid handle returned in the hwnd parameter.
The specified window has already been registered as a drop target.
Insufficient memory for the operation.
Note  If you use CoInitialize or CoInitializeEx instead of OleInitialize to initialize COM, RegisterDragDrop will always return an E_OUTOFMEMORY error.


If your application can accept dropped objects during OLE drag-and-drop operations, you must call the RegisterDragDrop function. Do this whenever one of your application windows is available as a potential drop target; that is, when the window appears unobscured on the screen.

The application thread that calls the RegisterDragDrop function must be pumping messages, presumably by calling the GetMessage function with a NULL hWnd parameter, because OLE creates windows on the thread that need messages processed. If this requirement isn't met, then any application that drags an object over the window that is registered as a drop target will hang until the target application closes.

The RegisterDragDrop function only registers one window at a time, so you must call it for each application window capable of accepting dropped objects.

As the mouse passes over unobscured portions of the target window during an OLE drag-and-drop operation, the DoDragDrop function calls the specified IDropTarget::DragOver method for the current window. When a drop operation actually occurs in a given window, the DoDragDrop function calls IDropTarget::Drop.

The RegisterDragDrop function also calls the IUnknown::AddRef method on the IDropTarget pointer.


Requirement Value
Minimum supported client Windows 2000 Professional [desktop apps only]
Minimum supported server Windows 2000 Server [desktop apps only]
Target Platform Windows
Header ole2.h
Library Ole32.lib
DLL Ole32.dll

See also