正文

CTreeCtrl学习笔记2-专题篇2007-01-25 14:25:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/yuqiexing/22799.html

分享到:

           如何对CTreeCtrl的项进行拖曳   (1) 取消TVS_DISABLEDRAGDROP 样式,该样式会禁止发送TVN_BEGINDRAG消息     (2) 派生一个类于CTreeCtrl,定义几个成员变量:     CImageList *m_pDragImage;//拖曳图像列表指针     BOOL m_bLDragging;//是否拖曳     HTREEITEM m_hitemDrag,m_hitemDrop;//拖曳项和目标项     (3)响应拖曳消息TVN_BEGINDRAG void CTreeCtrlEx::OnBegindrag(NMHDR* pNMHDR, LRESULT* pResult) {     NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;     // TODO: Add your control notification handler code here     m_hitemDrag=pNMTreeView->itemNew.hItem;//获得拖曳项     m_hitemDrop=NULL;     m_pDragImage=CreateDragImage(m_hitemDrag);//创建拖曳图像     if(!m_pDragImage)            return;     this->m_bLDragging=TRUE;     m_pDragImage->BeginDrag(0,CPoint(-15,-15));//后面的point表示拖曳图像离拖曳项的相对位置     POINT pt=pNMTreeView->ptDrag;     ClientToScreen(&pt);     m_pDragImage->DragEnter(NULL,pt);//开始显示拖曳图像     SetCapture();//锁定鼠标     *pResult = 0; }     (4)响应鼠标移动消息 void CTreeCtrlEx::OnMouseMove(UINT nFlags, CPoint point) {        // TODO: Add your message handler code here and/or call default        HTREEITEM hitem;        UINT flags;        if(m_bLDragging)        {               POINT pt=point;               ClientToScreen(&pt);               CImageList::DragMove(pt);//当鼠标移动时也移动拖曳的图像               if((hitem=HitTest(point,&flags))!=NULL)//确定鼠标所在的项               {                      CImageList::DragShowNolock(FALSE);//隐藏拖曳图像                      SelectDropTarget(hitem);                      m_hitemDrop=hitem;//确定目标项                      CImageList::DragShowNolock(TRUE);//重新显示               }        }          CTreeCtrl::OnMouseMove(nFlags, point); }     (5)鼠标弹起消息 void CTreeCtrlEx::OnLButtonUp(UINT nFlags, CPoint point) {        // TODO: Add your message handler code here and/or call default        if(m_bLDragging)//是否拖动        {               m_bLDragging=FALSE;               CImageList::DragLeave(this);               CImageList::EndDrag();//结束拖曳               ReleaseCapture();               delete m_pDragImage;               SelectDropTarget(NULL);               if(m_hitemDrag==m_hitemDrop)                      return;                      MessageBox("拖曳成功!"); 。。。。现在已经获知了拖曳项和目标项,就看你自己需要什么代码了,略去。        }        CTreeCtrl::OnLButtonUp(nFlags, point); }  

阅读(5869) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册