CTreeCtrl的拖拽功能
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
[MFC编程]一个具有拖拽功能的TreeCtrl
2011-05-07 22:37:20| 分类:MFC编程|举报|字号订阅
#if !defined(AFX_DRAGTREE_H__3015F03F_045E_4531_A436_E2A890F2 3540__INCLUDED_)
#define
AFX_DRAGTREE_H__3015F03F_045E_4531_A436_E2A890F23540__INCL UDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// DragTree.h : header file
//
/////////////////////////////////////////////////////////////////////////////
// CDragTree window
class CDragTree : public CTreeCtrl
{
// Construction
public:
CDragTree();
CImageList* m_pDragImages; //拖动的图像列表
BOOL m_bDrag; //是否进行拖动
HTREEITEM m_hBeginDrag; //拖动的起点
// Attributes
public:
// Operations
public:
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CDragTree)
//}}AFX_VIRTUAL
// Implementation
public:
void CopyNodes(HTREEITEM hDesItem, HTREEITEM hSrcItem);
virtual ~CDragTree();
// Generated message map functions
protected:
//{{AFX_MSG(CDragTree)
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
DECLARE_MESSAGE_MAP()
};
/////////////////////////////////////////////////////////////////////////////
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif
// !defined(AFX_DRAGTREE_H__3015F03F_045E_4531_A436_E2A890F23 540__INCLUDED_)
// DragTree.cpp : implementation file
//
#include "stdafx.h"
#include "DragTreeItem.h"
#include "DragTree.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CDragTree
CDragTree::CDragTree()
{
m_pDragImages = NULL;
m_bDrag = FALSE;
m_hBeginDrag = NULL;
}
CDragTree::~CDragTree()
{
}
BEGIN_MESSAGE_MAP(CDragTree, CTreeCtrl)
//{{AFX_MSG_MAP(CDragTree)
ON_NOTIFY_REFLECT(TVN_BEGINDRAG, OnBegindrag)
ON_WM_MOUSEMOVE()
ON_WM_LBUTTONUP()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDragTree message handlers
void CDragTree::OnBegindrag(NMHDR* pNMHDR, LRESULT* pResult) {
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
HTREEITEM hItem = pNMTreeView->itemNew.hItem; //获取开始拖动的节点 if (hItem==GetRootItem()) //不允许拖动根节点