VC 树控件的拖拽实现 MFC

本文介绍如何在MFC项目中使用CXTreeCtrl类实现树控件的拖拽功能。通过继承CTreeCtrl并重写特定消息处理函数,如OnBegindrag、OnMouseMove和OnLButtonUp,可以实现在树控件中的拖放效果。在CXTreeCtrl类中定义了拖拽过程中的关键变量和方法,包括创建拖动图像列表、处理拖放逻辑和滚动处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

只需要将你的树控件类型改成CXTreeCtrl,并将以下头文件:XTreeCtrl.h和实现文件:XTreeCtrl.cpp包含进你的工程。

 

然后在void CXTreeCtrl::OnLButtonUp(UINT nFlags, CPoint point)这个函数中加入你自己的响应代码,即可完成树控件的拖拽效果。

 

//XTreeCtrl.h

--------------------------------------------------------------------------------------------------------------------------

 

#if !defined(AFX_XTREECTRL_H__3EF12526_EF66_4FD9_A572_59476441D79A__INCLUDED_)

#define AFX_XTREECTRL_H__3EF12526_EF66_4FD9_A572_59476441D79A__INCLUDED_

#if _MSC_VER > 1000

#pragma once

#endif // _MSC_VER > 1000

 

class CXTreeCtrl : public CTreeCtrl

{

// Construction

public:

CXTreeCtrl();

 

public:

virtual ~CXTreeCtrl();

// Generated message map functions

protected:

UINT m_TimerTicks; //处理滚动的定时器所经过的时间

UINT m_nScrollTimerID; //处理滚动的定时器

CPoint m_HoverPoint; //鼠标位置

UINT m_nHoverTimerID; //鼠标敏感定时器

DWORD m_dwDragStart; //按下鼠标左键那一刻的时间

BOOL m_bDragging; //标识是否正在拖动过程中

CImageList* m_pDragImage; //拖动时显示的图象列表

HTREEITEM m_hItemDragS; //被拖动的标签

HTREEITEM m_hItemDragD; //接受拖动的标签

 

//{ {AFX_MSG(CXTreeCtrl)

afx_msg void OnBegindrag(NMHDR* pNMHDR, LRESULT* pResult);

afx_msg void OnMouseMove(UINT nFlags, CPoint point);

afx_msg void OnLButtonUp(UINT nFlags, CPoint point);

afx_msg void OnLButtonDown(UINT nFlags, CPoint point);

afx_msg void OnTimer(UINT nIDEvent);

//}}AFX_MSG

DECLARE_MESSAGE_MAP()

private:

HTREEITEM CopyBranch(HTREEITEM htiBranch,HTREEITEM htiNewParent,HTREEITEM htiAfter);

HTREEITEM CopyItem(HTREEITEM hItem,HTREEITEM htiNewParent,HTREEITEM htiAfter);

};

#endif

 

-----------------------------------------------------------------------------------------------------

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值