VC/MFC 拖放树形控件与列表控件的项

VC/MFC 拖放树形控件与列表控件的项

// 在类的头文件中定义以下变量

  DWORD m_dwDragStart;
  HTREEITEM m_hItemDragD;
  HTREEITEM m_hItemDragS;

  CTreeCtrl m_Tree;

  CImageList* m_pDragImage;

  BOOL  m_bDragging;

  UINT m_nScrollTimerID;

 

// 实现拖放树形控件节点的功能

//OnTvnBegindragTree为树形控件的系统消息

void OnTvnBegindragTree(NMHDR *pNMHDR, LRESULT *pResult)
{
 LPNMTREEVIEW pNMTreeView = reinterpret_cast(pNMHDR);
 // TODO: 在此添加控件通知处理程序代码
 NM_TREEVIEW* pNMTreeV = (NM_TREEVIEW*)pNMHDR;
 m_bIsTree = TRUE;

 //在OnLButtonDown事件中m_dwDragStart = GetTickCount();

 //GetTickCount为获得系统当前时间
 if( (GetTickCount() - m_dwDragStart) < DRAG_DELAY )
     return;
 m_hItemDragS = pNMTreeV->itemNew.hItem;
 m_hItemDragD = NULL;

 HTREEITEM hRootItem = m_Tree.GetRootItem();
 if ( hRootItem ==  m_hItemDragS)
     return ;

 //得到用于拖动时显示的图象列表
 m_pDragImage = m_Tree.CreateDragImage(m_hItemDragS);
 if(!m_pDragImage)
    return;
 m_bDragging = true;
 m_pDragImage->BeginDrag ( 0,CPoint(8,8) );
 CPoint pt = pNMTreeView->ptDrag;
 ClientToScreen( &pt );
 //ScreenToClient(&pt);
 m_pDragImage->DragEnter(this,pt);
 SetCapture();
 m_nScrollTimerID = SetTimer(2,40,NULL);
 *pResult = 0;
}

 

 

 // 在类的头文件中定义以下变量

  BOOL  m_bDragging;

  UINT  m_nScrollTimerID;

  int   m_nDragIndex; //Index of selected item in the List we are dragging FROM
  int   m_nDropIndex; //Index at which to drop item in the List we are dropping ON

  CImageList  m_ImageList;

  CWnd*  m_pDropWnd;  //Pointer to window we are dropping on

                      //(will be cast to CListCtrl* type)

  CListCtrl* m_pDragList;  //Which ListCtrl we are dragging FROM

 

//开始拖动列表视图m_List的项

//OnLvnBegindragList为列表控件的系统消息
void OnLvnBegindragList(NMHDR *pNMHDR, LRESULT *pResult)
{

 LPNMLISTVIEW pNMLV = reinterpret_cast(pNMHDR);
 NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
 m_nDragIndex = pNMListView->iItem;

 m_ImageList.BeginDrag(m_nDragIndex,CPoint(0,0));

 CPoint point(pNMListView->ptAction);
 ScreenToClient(&point);
 m_ImageList.DragEnter((CWnd*)&m_NavigationList,point);

 m_bDragging = TRUE; //we are in a drag and drop operation
 m_nDropIndex = -1; //we don't have a drop index yet
 m_pDragList = &m_List; //make note of which list we are dragging from
 m_pDropWnd = &m_List; //at present the drag list is the drop list

  Capture all mouse messages
 m_nScrollTimerID = SetTimer(2,40,NULL);
 SetCapture();
 *pResult = 0;

}


http://blog.sina.com.cn/s/blog_4b44e1c001009xqd.html


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值