OLE文件拖放

OLE拖放原理

MFC为实现对象拖放提供了如下类:COleDataSource、COleDataObject、COleDropTarget、COleDropSource。下面分别介绍它们,然后通过一个实例讲述实现的具体步骤。

·  COleDataSource

启动一次拖放操作,保存拖放的数据,并向系统提供拖放对象的数据。类中重要的成员函数根据用途分为如下三种:

1. 用于设定提供数据的方式和使用的数据格式。

提供数据的方式有两种,一种是即时方式,另一种是延迟方式。延迟方式不需要立即提供数据,当需要提供数据时,系统将调用对应的函数来获得数据,一般都是重载OnRenderData函数或其他虚函数,以响应数据请求。数据格式可以是CF_TEXT等常用的剪贴板格式,也可以是自己利用函数RegisterClipboardFormat函数注册的特定格式。

CacheData:提供指定格式的数据,格式由结构STGMEDIUM指定,即时方式;

CacheGlobalData:利用全局句柄HGLOBAL,为指定格式提供数据,即时方式,适用小数据量;

DelayRenderData:使用延迟方式按指定格式提供数据,当系统需要数据时,会调用函数OnRenderGlobalData/OnRenderData来取得数据;

DelayRenderFileData:使用延迟方式利用CFile为指定格式提供数据,当需要数据时,会调用函数OnRenderFileData来取得数据;

2. 响应请求,提供数据

OnRenderFileData:为延迟方式提供CFile型数据。

OnRenderGlobalData:为延迟方式提供HGLOBAL数据。

OnRenerData:为延迟方式提供各种所支持的类型的数据。

3. 实施拖放操作

DoDragDrop:开始实施拖放操作

 

·  COleDataObject

用于代表拖放的数据,它是作为COleDataSource类的成员,类中主要成员函数有:

BeginEnumFormat:为枚举数据格式作准备;

GetNextFormat:返回下一个数据格式;

IsDataAvailable: 检查指定的数据格式是否可用;

GetData:按指定数据格式,获得数据;

GetFileData:按指定数据格式,获得CFile型数据;

GetGlobalData:按指定数据格式,获得HGLOBAL型数据;

 

·  COleDropTarget

用于在窗口和OLE库之间提供通讯机制。任何一个窗口,要想能够接收拖放,必须包含一个COleDropTarget对象,并注册之。其中的成员函数可分为两大类:

1. 注册

Register:注册该对象,以便使窗口能够接收拖放对象

2. 响应拖放过程中的动作(虚函数)

OnDragEnter:当鼠标首次进入窗口时被调用;

OnDragLeave:当鼠标移出窗口时被调用;

OnDragOver:当鼠标停留在窗口内时,被重复调用;

OnDrop: 当鼠标在窗口内落下被调用;

虚函数onDragEnter和OnDragOver的返回值具有重要的含义,一般为以下三种之一:

DROPEFFECT_MOVE:移动操作,允许对象落在此窗口,落下时要删除原来的对象;

DROPEFFECT_COPY:复制操作,允许对象落在此窗口,落下时不删除原来的对象;

DROPFFECT_NONE:不允许对象落在此窗口;

 

·  COleDropSource

COleDropSource允许数据被拖放到一个拖放目标,它负责对何时启动一个拖放操作进行决断,反馈拖放操作状态,以及判断拖放操作何时结束。这个类比较简单,用得也较少。它的成员函数只有三个:

GiveFeedback:用于改变拖放期间鼠标的光标,把拖放状态反馈给用户知晓;

OnBeginDrag:在拖放期间捕捉鼠标指针,当应用程序框架觉得可能要发生一个拖放操作时,它会调用该函数;

QueryContinueDrag:检测拖放操作是否还在继续中。

 

Damo:

你可能感兴趣的:(OLE文件拖放)