COleDropSource 类
允许将数据拖动到放置目标。
语法
class COleDropSource : public CCmdTarget
成员
公共构造函数
名称 | 描述 |
---|---|
COleDropSource::COleDropSource | 构造 COleDropSource 对象。 |
公共方法
名称 | 描述 |
---|---|
COleDropSource::GiveFeedback | 在拖放操作期间更改游标。 |
COleDropSource::OnBeginDrag | 在拖放操作期间处理鼠标捕获。 |
COleDropSource::QueryContinueDrag | 检查拖动是否应继续进行。 |
备注
COleDropTarget 类处理拖放操作的接收部分。 COleDropSource
对象负责确定拖动操作何时开始、在拖动操作期间提供反馈以及确定拖动操作何时结束。
若要使用 COleDropSource
对象,只需调用构造函数。 这简化了使用 COleDataSource::DoDragDrop、COleClientItem::DoDragDrop 或 COleServerItem::DoDragDrop 函数确定哪些事件(如鼠标单击)开始拖动操作的过程。 这些函数会为你创建 COleDropSource
对象。 你可能要修改 COleDropSource
可重写函数的默认行为。 框架会在适当时间调用这些成员函数。
有关使用 OLE 进行拖放操作的详细信息,请参阅 OLE 拖放一文。
有关详细信息,请参阅 Windows SDK 中的 IDropSource。
继承层次结构
COleDropSource
要求
标头:afxole.h
COleDropSource::COleDropSource
构造 COleDropSource
对象。
COleDropSource();
COleDropSource::GiveFeedback
在调用 COleDropTarget::OnDragOver 或 COleDropTarget::DragEnter 后由框架调用。
virtual SCODE GiveFeedback(DROPEFFECT dropEffect);
参数
dropEffect
要向用户显示的效果,通常指示如果此时对所选数据进行放置,会发生什么情况。 通常,这是最近 CView::OnDragEnter 或 CView::OnDragOver 调用返回的值。 可以是以下一项或多项:
DROPEFFECT_NONE:不允许放置。
DROPEFFECT_COPY:执行复制操作。
DROPEFFECT_MOVE:执行移动操作。
DROPEFFECT_LINK:建立从已放置的数据到原始数据的链接。
DROPEFFECT_SCROLL:即将或正在目标中执行拖动滚动操作。
返回值
如果拖动正在进行,则返回 DRAGDROP_S_USEDEFAULTCURSORS,否则返回 NOERROR。
备注
替代此函数以向用户提供反馈,说明如果此时进行放置,会发生什么情况。 默认实现使用 OLE 默认游标。 有关使用 OLE 进行拖放操作的详细信息,请参阅 OLE 拖放一文。
有关详细信息,请参阅 Windows SDK 中的 IDropSource::GiveFeedback、IDropTarget::DragOver 和 IDropTarget::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,并且不执行进一步操作。
由于此函数经常调用,因此应尽可能进行优化。