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 拖放一文。
继承层次结构
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
在调用 OnDragEnter 或 OnDragOver 以确定 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 类