CTreeListCtrl是一个功能丰富的树形列表控件,它结合了CTreeCtrl和CListCtrl的特性。以下是CTreeListCtrl的一些主要特点:
与CTreeCtrl和CListCtrl兼容;支持头部拖放;可以在CTreeListCtrl之间进行拖放;具有透明拖拽窗口和Alpha混合效果;支持双色列表;支持背景图像;支持复选框和锁定框;支持嵌入修改后的控件。
以下是CTreeListCtrl的一些快照示例:
快照1:
快照2:
首先,在项目中包含TurboDLL头文件:
#include "..\\TurboDLL\\xTurboDll.h"
然后,定义控件:
class CMyTreeListCtrl : public CTreeListCtrl
{
public:
CMyTreeListCtrl();
virtual ~CMyTreeListCtrl();
protected:
//{{AFX_MSG(CMyTreeListCtrl)
afx_msg void OnExpanding(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnExpanded(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnUpdating(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnUpdated(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnBeginDrag(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnDragEnter(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnDragLeave(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnDragOver(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnDrop(NMHDR* pNMHDR, LRESULT* pResult);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
在对话框类中使用控件:
class CTurboDragDlg : public CDialog
{
// Construction
public:
CTurboDragDlg(CWnd* pParent = NULL);
// standard constructor
...
CImageList m_ImageList;
CMyTreeListCtrl m_tree1;
CMyTreeListCtrl m_tree2;
...
};
CTurboDragDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
m_ImageList.Create( IDB_BITMAP_TREE, 16, 4, 0xFF00FF);
CRect rect;
GetClientRect(▭);
rect.DeflateRect(5, 5, 5, 5);
CRect left;
left = rect;
left.right = ( rect.left + rect.right ) / 2;
CRect right;
right = rect;
right.left = ( rect.left + rect.right ) / 2;
m_tree1.Create(0x50810000, left, this, 0);
m_tree2.Create(0x50810000, right, this, 1);
// Add other initialize code here
...
return TRUE;
// return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
之后,可以自由地使用这个控件。