RegisterDragDrop 函数 (ole2.h)

将指定的窗口注册为可以作为 OLE 拖放操作目标的窗口,并指定要用于放置操作的 IDropTarget 实例。

语法

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

参数

[in] hwnd

窗口的句柄,该窗口可以是 OLE 拖放操作的目标。

[in] pDropTarget

指向对象上的 IDropTarget 接口的指针,该对象是指定窗口中拖放操作的目标。 此接口用于传达该窗口的 OLE 拖放信息。

返回值

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

返回代码 说明
DRAGDROP_E_INVALIDHWND
hwnd 参数中返回的句柄无效。
DRAGDROP_E_ALREADYREGISTERED
指定的窗口已注册为放置目标。
E_OUTOFMEMORY
操作的内存不足。
 
注意如果使用 CoInitializeCoInitializeEx 而不是 OleInitialize 初始化 COM,RegisterDragDrop 将始终返回E_OUTOFMEMORY错误。
 

注解

如果应用程序可以在 OLE 拖放操作期间接受已删除的对象,则必须调用 RegisterDragDrop 函数。 每当某个应用程序窗口作为潜在放置目标可用时执行此操作;也就是说,当窗口在屏幕上不显示时。

调用 RegisterDragDrop 函数的应用程序线程必须抽送消息(大概是通过使用 NULLhWnd 参数调用 GetMessage 函数),因为 OLE 会在需要处理消息的线程上创建窗口。 如果未满足此要求,则任何将对象拖动到注册为放置目标的窗口上的应用程序都将挂起,直到目标应用程序关闭。

RegisterDragDrop 函数一次只注册一个窗口,因此必须针对能够接受已删除对象的每个应用程序窗口调用它。

当鼠标在 OLE 拖放操作期间通过目标窗口的未遮挡部分时, DoDragDrop 函数为当前窗口调用指定的 IDropTarget::D ragOver 方法。 当放置操作实际发生在给定的窗口中时, DoDragDrop 函数调用 IDropTarget::D rop

RegisterDragDrop 函数还调用 IDropTarget 指针上的 IUnknown::AddRef 方法。

要求

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

另请参阅

RevokeDragDrop