COleDropTarget 类

提供窗口和 OLE 库之间的通信机制。

语法

class COleDropTarget : public CCmdTarget

成员

公共构造函数

名称 描述
COleDropTarget::COleDropTarget 构造 COleDropTarget 对象。

公共方法

名称 描述
COleDropTarget::OnDragEnter 当光标首次进入窗口时调用。
COleDropTarget::OnDragLeave 将光标拖出窗口时调用。
COleDropTarget::OnDragOver 将光标拖至窗口上时重复调用。
COleDropTarget::OnDragScroll 调用以确定是否将光标拖入窗口的滚动区域内。
COleDropTarget::OnDrop 将数据放入窗口时调用,默认处理程序。
COleDropTarget::OnDropEx 将数据放入窗口时调用,初始处理程序。
COleDropTarget::Register 将窗口注册为有效的放置目标。
COleDropTarget::Revoke 使窗口不再是有效的放置目标。

备注

创建此类的对象可使窗口能够通过 OLE 拖放机制接受数据。

要让窗口接受放置命令,应首先创建 COleDropTarget 类的对象,然后调用 Register 函数并将指向所需 CWnd 对象的指针用作唯一一个参数。

有关使用 OLE 进行拖放操作的详细信息,请参阅 OLE 拖放一文。

继承层次结构

CObject

CCmdTarget

COleDropTarget

要求

标头:afxole.h

COleDropTarget::COleDropTarget

构造 COleDropTarget 类的对象。

COleDropTarget();

备注

调用 Register 以将此对象与窗口相关联。

COleDropTarget::OnDragEnter

首次将光标拖入窗口时由框架调用。

virtual DROPEFFECT OnDragEnter(
    CWnd* pWnd,
    COleDataObject* pDataObject,
    DWORD dwKeyState,
    CPoint point);

参数

pWnd
指向光标正在进入的窗口。

pDataObject
指向包含可放置的数据的数据对象。

dwKeyState
包含修改键的状态。 此参数为以下任意数量的项的组合:MK_CONTROL、MK_SHIFT、MK_ALT、MK_LBUTTON、MK_MBUTTON 和 MK_RBUTTON。

point
包含光标的当前位置,以客户端坐标表示。

返回值

在 point 指定的位置尝试放置时产生的效果。 可以是以下一项或多项:

  • DROPEFFECT_NONE:不允许放置。

  • DROPEFFECT_COPY:执行复制操作。

  • DROPEFFECT_MOVE:执行移动操作。

  • DROPEFFECT_LINK:建立从已放置的数据到原始数据的链接。

  • DROPEFFECT_SCROLL:即将或正在目标中执行拖动滚动操作。

备注

重写此函数以允许在窗口中执行拖动操作。 默认实现调用 CView::OnDragEnter,后者默认返回 DROPEFFECT_NONE。

有关详细信息,请参阅 Windows SDK 中的 IDropTarget::DragEnter

COleDropTarget::OnDragLeave

在拖动操作生效的情况下,当光标离开窗口时由框架调用。

virtual void OnDragLeave(CWnd* pWnd);

参数

pWnd
指向光标正在离开的窗口。

备注

如果你希望在拖动操作离开指定的窗口时发生特殊行为,请重写此函数。 此函数的默认实现调用 CView::OnDragLeave

有关详细信息,请参阅 Windows SDK 中的 IDropTarget::DragLeave

COleDropTarget::OnDragOver

将光标拖至窗口上时由框架调用。

virtual DROPEFFECT OnDragOver(
    CWnd* pWnd,
    COleDataObject* pDataObject,
    DWORD dwKeyState,
    CPoint point);

参数

pWnd
指向光标所在的窗口。

pDataObject
指向包含要放置的数据的数据对象。

dwKeyState
包含修改键的状态。 此参数为以下任意数量的项的组合:MK_CONTROL、MK_SHIFT、MK_ALT、MK_LBUTTON、MK_MBUTTON 和 MK_RBUTTON。

point
包含光标的当前位置,以客户端坐标表示。

返回值

在 point 指定的位置尝试放置时产生的效果。 可以是以下一项或多项:

  • DROPEFFECT_NONE:不允许放置。

  • DROPEFFECT_COPY:执行复制操作。

  • DROPEFFECT_MOVE:执行移动操作。

  • DROPEFFECT_LINK:建立从已放置的数据到原始数据的链接。

  • DROPEFFECT_SCROLL:指示即将或正在目标中执行拖动滚动操作。

注解

应重写此函数以允许在窗口中执行放置操作。 此函数的默认实现调用 CView::OnDragOver,后者默认返回 DROPEFFECT_NONE。 由于在拖放操作期间会频繁调用此函数,因此应尽可能将其优化。

有关详细信息,请参阅 Windows SDK 中的 IDropTarget::DragOver

示例

DROPEFFECT COleContainerView::OnDragOver(COleDataObject* pDataObject,
   DWORD dwKeyState, CPoint point)
{
   UNREFERENCED_PARAMETER(pDataObject);
   UNREFERENCED_PARAMETER(point);

   DROPEFFECT de = DROPEFFECT_NONE;
   //Determine the type of operation
   if ((dwKeyState & MK_SHIFT) && (dwKeyState & MK_CONTROL))
      de = DROPEFFECT_LINK;
   else if (dwKeyState & MK_CONTROL)
      de = DROPEFFECT_COPY;
   else if (dwKeyState & MK_SHIFT)
      de = DROPEFFECT_MOVE;
   return de;
}

COleDropTarget::OnDragScroll

在调用 OnDragEnterOnDragOver 以确定 point 是否位于滚动区域中之前由框架调用

virtual DROPEFFECT OnDragScroll(
    CWnd* pWnd,
    DWORD dwKeyState,
    CPoint point);

参数

pWnd
指向光标当前所在的窗口。

dwKeyState
包含修改键的状态。 此参数为以下任意数量的项的组合:MK_CONTROL、MK_SHIFT、MK_ALT、MK_LBUTTON、MK_MBUTTON 和 MK_RBUTTON。

point
包含光标相对于屏幕的位置(以像素为单位)。

返回值

在 point 指定的位置尝试放置时产生的效果。 可以是以下一项或多项:

  • DROPEFFECT_NONE:不允许放置。

  • DROPEFFECT_COPY:执行复制操作。

  • DROPEFFECT_MOVE:执行移动操作。

  • DROPEFFECT_LINK:建立从已放置的数据到原始数据的链接。

  • DROPEFFECT_SCROLL:指示即将或正在目标中执行拖动滚动操作。

备注

如果要为此事件提供特殊行为,则重写此函数。 此函数的默认实现调用 CView::OnDragScroll,后者返回 DROPEFFECT_NONE,并在将光标拖入窗口边框范围内的默认滚动区域时滚动窗口。

COleDropTarget::OnDrop

发生放置操作时由框架调用。

virtual BOOL OnDrop(
    CWnd* pWnd,
    COleDataObject* pDataObject,
    DROPEFFECT dropEffect,
    CPoint point);

参数

pWnd
指向光标当前所在的窗口。

pDataObject
指向包含要放置的数据的数据对象。

dropEffect
用户为放置操作选择的效果。 可以是以下一项或多项:

  • DROPEFFECT_COPY:执行复制操作。

  • DROPEFFECT_MOVE:执行移动操作。

  • DROPEFFECT_LINK:建立从已放置的数据到原始数据的链接。

point
包含光标相对于屏幕的位置(以像素为单位)。

返回值

如果放置成功,则返回非零值;否则返回 0。

注解

框架首先调用 OnDropEx。 如果 OnDropEx 函数不处理放置,则框架随后会调用成员函数 OnDrop。 通常,应用程序会重写视图类中的 OnDropEx 来处理鼠标右键拖放。 通常,视图类 OnDrop 用于处理简单的拖放。

COleDropTarget::OnDrop 的默认实现调用 CView::OnDrop,后者默认返回 FALSE。

有关详细信息,请参阅 Windows SDK 中的 IDropTarget::Drop

COleDropTarget::OnDropEx

发生放置操作时由框架调用。

virtual DROPEFFECT OnDropEx(
    CWnd* pWnd,
    COleDataObject* pDataObject,
    DROPEFFECT dropDefault,
    DROPEFFECT dropList,
    CPoint point);

参数

pWnd
指向光标当前所在的窗口。

pDataObject
指向包含要放置的数据的数据对象。

dropDefault
用户根据当前键状态为默认放置操作选择的效果。 它可以是 DROPEFFECT_NONE。 “备注”部分中讨论了放置效果。

dropList
放置源支持的放置效果列表。 可以使用按位“或”(|) 运算符对放置效果值进行组合。 “备注”部分中讨论了放置效果。

point
包含光标相对于屏幕的位置(以像素为单位)。

返回值

在 point 指定的位置处尝试放置而导致的放置效果。 “备注”部分中讨论了放置效果。

备注

框架首先调用此函数。 如果它不处理放置,则框架会调用 OnDrop。 通常,你会重写视图类中的 OnDropEx 来支持鼠标右键拖放。 通常,视图类 OnDrop 用于处理简单拖放的支持用例。

COleDropTarget::OnDropEx 的默认实现调用 CView::OnDropEx。 默认情况下,CView::OnDropEx 仅返回一个虚拟值以指示应调用 OnDrop 成员函数。

放置效果描述与放置操作关联的操作。 请参见放置效果的以下列表:

  • DROPEFFECT_NONE:不允许放置。

  • DROPEFFECT_COPY:执行复制操作。

  • DROPEFFECT_MOVE:执行移动操作。

  • DROPEFFECT_LINK:建立从已放置的数据到原始数据的链接。

  • DROPEFFECT_SCROLL:指示即将或正在目标中执行拖动滚动操作。

有关详细信息,请参阅 Windows SDK 中的 IDropTarget::Drop

COleDropTarget::Register

调用此函数可以使用 OLE DLL 将窗口注册为有效的放置目标。

BOOL Register(CWnd* pWnd);

参数

pWnd
指向要注册为放置目标的窗口。

返回值

如果注册成功,则返回非零值;否则返回 0。

备注

必须调用此函数才能接受放置操作。

有关详细信息,请参阅 Windows SDK 中的 RegisterDragDrop

COleDropTarget::Revoke

在销毁已注册为放置目标的任何窗口之前调用此函数,方法是调用 Register 将该窗口从放置目标列表中删除。

virtual void Revoke();

备注

此函数将自动从已注册窗口的 OnDestroy 处理程序调用,因此通常不需要显式调用此函数。

有关详细信息,请参阅 Windows SDK 中的 RevokeDragDrop

另请参阅

MFC 示例 HIERSVR
MFC 示例 OCLIENT
CCmdTarget 类
层次结构图
COleDropSource 类