第1页共9页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第1页共9页第六部分:实现Drop目标对象(OLEdrag&drop之旅)欢迎你到OLE拖放操作的第六章
这里将着重于一个实现了drop-target的小程序,这就意味着我们的程序能够接收拖到它上面的对象(文件、图片、文本)了
我们实现一个IDropTarget的COM接口允许OLE程序拖动数据到我们的程序上;这里仅仅是一个简单的EDIT控件,所以他将CF_TEXT数据作为目标
成为一个“DropTarget”为了时窗口可以接收拖放操作的数据,窗口必须注册为drop目标;有一个OLE的API调用RegisterDragDrop来完成这个事情,函数的原型是:WINOLEAPIRegisterDragDrop(HWNDhwnd,IDropTarget*pDropTarget);第一个参数是窗口的HANDLE,这个窗口是拖动的目标窗口;第二个参数是一个指向IDropTargetCOM对象的指针,COM/OLE运行时将在拖放操作的过程中调用这个方法
同样有一个OLEAPI调用来将window从拖放操作中删除:WINOLEAPIRevokeDragDrop(HWNDhwnd);我们所要做的就是在窗口创建的时候调用RegisterDragDrop,在窗口销毁的时候调用RevokeDragDrop
在我们调用RegisterDragDrop之前,我们需要构造一个COM对象来支持IDropTarget接口
IDropTarget接口IDropTarget接口相对比较简单,有四个函数需要实现,当然,也要实现IUnknown接口,不过我们前面已经介绍了
IDropTarget方法描述DragEnter判断是否可以接受一个拖操作,以及接受之后的效果DragOver提供通过DoDragDrop函数执行的目标反馈DragL