COleDropSource 类

允许将数据拖动到放置目标。

语法

class COleDropSource : public CCmdTarget

成员

公共构造函数

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

公共方法

名称 描述
COleDropSource::GiveFeedback 在拖放操作期间更改游标。
COleDropSource::OnBeginDrag 在拖放操作期间处理鼠标捕获。
COleDropSource::QueryContinueDrag 检查拖动是否应继续进行。

备注

COleDropTarget 类处理拖放操作的接收部分。 COleDropSource 对象负责确定拖动操作何时开始、在拖动操作期间提供反馈以及确定拖动操作何时结束。

若要使用 COleDropSource 对象,只需调用构造函数。 这简化了使用 COleDataSource::DoDragDropCOleClientItem::DoDragDropCOleServerItem::DoDragDrop 函数确定哪些事件(如鼠标单击)开始拖动操作的过程。 这些函数会为你创建 COleDropSource 对象。 你可能要修改 COleDropSource 可重写函数的默认行为。 框架会在适当时间调用这些成员函数。

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

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

继承层次结构

CObject

CCmdTarget

COleDropSource

要求

标头:afxole.h

COleDropSource::COleDropSource

构造 COleDropSource 对象。

COleDropSource();

COleDropSource::GiveFeedback

在调用 COleDropTarget::OnDragOverCOleDropTarget::DragEnter 后由框架调用。

virtual SCODE GiveFeedback(DROPEFFECT dropEffect);

参数

dropEffect
要向用户显示的效果,通常指示如果此时对所选数据进行放置,会发生什么情况。 通常,这是最近 CView::OnDragEnterCView::OnDragOver 调用返回的值。 可以是以下一项或多项:

  • DROPEFFECT_NONE:不允许放置。

  • DROPEFFECT_COPY:执行复制操作。

  • DROPEFFECT_MOVE:执行移动操作。

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

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

返回值

如果拖动正在进行,则返回 DRAGDROP_S_USEDEFAULTCURSORS,否则返回 NOERROR。

备注

替代此函数以向用户提供反馈,说明如果此时进行放置,会发生什么情况。 默认实现使用 OLE 默认游标。 有关使用 OLE 进行拖放操作的详细信息,请参阅 OLE 拖放一文。

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

COleDropSource::OnBeginDrag

当发生可能启动拖动操作的事件(例如按鼠标左键)时由框架调用。

virtual BOOL OnBeginDrag(CWnd* pWnd);

参数

pWnd
指向包含所选数据的窗口。

返回值

如果允许拖动,则为非零值,否则为 0。

注解

如果要修改拖动过程的启动方式,请替代此函数。 默认实现会捕获鼠标,并会一直处于拖动模式,直到用户单击鼠标左键或右键或是点击 ESC(此时会释放鼠标)。

COleDropSource::QueryContinueDrag

拖动开始后,框架会重复调用此函数,直到拖动操作取消或完成。

virtual SCODE QueryContinueDrag(
    BOOL bEscapePressed,
    DWORD dwKeyState);

参数

bEscapePressed
说明自上次调用 COleDropSource::QueryContinueDrag 以来是否按了 ESC 键。

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

返回值

如果在拖动开始之前按了 ESC 键或鼠标右键,或是释放了鼠标左键,则为 DRAGDROP_S_CANCEL。 如果应进行放置操作,则为 DRAGDROP_S_DROP。 否则为 S_OK。

备注

如果要更改取消拖动或进行放置的点,请替代此函数。

默认实现会启动放置或取消拖动,如下所示。 按 ESC 键或鼠标右键时,它会取消拖动操作。 在拖动开始后释放鼠标左键时,它会启动放置操作。 否则,它会返回 S_OK,并且不执行进一步操作。

由于此函数经常调用,因此应尽可能进行优化。

另请参阅

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