拖拽功能的实现是一个全局的功能实现,也就是可以跨进程的,类似windows文件拖拽打开的功能。下面说记录的是关于任意内容的全局拖拽的实现细节。关于相关函数和对象的具体描述可以直接MSDN查看,这里就不对其进行详细的简介。
大体的实现可以分为两个主要的部分:
1. 被拖拽对象中添加COleDataSource,以处理被拖拽对象
2. 在拖拽目标中添加COleDropTarget, 以处理拖拽目标接受拖拽的相关事件
下面是具体的代码示例,这个示例的具体功能实现的是把CTreeCtrl中的一个item所关联的数据拖拽到指定的CView类中,类似与文件的拖拽打开。
1. 关于被拖拽对象CTreeCtrl中的相关代码实现:
1.1. 首先在CTreeCtrl的扩展类中添加COleDataSource对象,我这里添加的是COleDataSource类型的指针。
//CDataViewTree.h
class CDataViewTree : public CTreeCtrl
{
private:
COleDataSource* m_dropSource;
... ...
//这是开始拖拽的消息处理函数
public:
afx_msg void OnTvnBegindrag(NMHDR *pNMHDR, LRESULT *pResult);
... ...
};
1.2. 在消息映射表中添加消息映射, 具体的实现部分都在OnTvnBegingdrag()函数中。
//CDataViewTree.cpp
BEGIN_MESSAGE