暮鼓集 行走集
原作于2008年03月25日
1.简介
CTreeCtrl封装了Windows common tree view control(控件)。
class CTreeCtrl : public CWnd
它可以表示一个层次列表(Hierachical List),每个Item包含一个Label和一个可选的Bitmap,且每个Item可以有一列Subitem。仅用于Win98, NT4以后的Windows版本。
下面是该控件的典型的使用方法。
2.创建Control。如果是在资源管理器中的建立于一个Dialog上,或者是使用CTreeView,则其随着Dialog获Tree View的建立而自动创建。如果要手动创建,需要使用create().
BOOL Create( DWORD dwStyle,
const RECT& rect,
CWnd* pParentWnd,
UINT nID );
dwStyle可以是Windows Style,也可以是Tree Control Style,而WS_VISIBLE则是必须的。
Example:
CTreeCtrl treectrl;
treectrl.Create (WS_VISIBLE | WS_TABSTOP | WS_CHILD | WS_BORDER | TVS_HASBUTTONS | TVS_LINESATROOT | TVS_HASLINES | TVS_DISABLEDRAGDROP, CRect(10, 10, 300, 100), this, 0x1005 );
3.如果Tree Control要使用Bitmap,使用SetImageList()来设置图像。也可以使用SetIndent来设置缩进。这些动作通常在OnInitDialog时获OnInitialUpdate(对于CTreeView)时来做。
CImageList* SetImageList( CImageList * pImageList, int nImageListType );
CImageList指向一个CImageList对象,如果这个值为空,则CTreeCtrl中的Image将被移除。
nImageListType有两种,TVSIL_NORMAL-包含选择和被选择两个状态的Image,TVSIL_STATE-用户定义状态的Image。
Example:
CImageList imglist;
CBitmap bitmap;
imglist.Create(16, 16, ILC_MASK, 1, 1);
bitmap.LoadBitmap( IDB_COMPUTER );
imglist.Add(&bitmap, (COLORREF)0xFFFFFF);
bitmap.DeleteObject();
treectrl.SetImageList(&m_imgList, TVSIL_NORMAL);
4.安排数据项,使用InsertItem()来插入一个item。InsertItem()返回一个Handle,这个Item可以在以后用来插入SubItem。
InsertItem有多种形式
HTREEITEM InsertItem( LPTVINSERTSTRUCT lpInsertStruct );
HTREEITEM InsertItem( UINT nMask, LPCTSTR lpszItem, int nImage, int nSelectedImage, UINT nState, UINT nStateMask, LPARAM lParam, HTREEITEM hParent, HTREEITEM hInsertAfter );
HTREEITEM InsertItem( LPCTSTR lpszItem, HTREEITEM hParent = TVI_ROOT, HTREEITEM hInsertAfter = TVI_LAST );
HTREEITEM InsertItem( LPCTSTR lpszItem, int nImage, int nSelectedImage, HTREEITEM hParent = TVI_ROOT, HTREEITEM hInsertAfter = TVI_LAST );
Example:
TVINSERTSTRUCT tvInsert;
HTREEITEM hCountry
tvInsert.hParent = NULL;
tvInsert.hInsertAfter = NULL;
tvInsert.item.mask = TVIF_TEXT;
tvInsert.item.pszText = _T("United States");
HTREEITEM hCountry = treectrl.InsertItem( &tvInsert );
pCtrl->InsertItem(_T("Pittsburgh"), hCountry, TVI_SORT);
5.与用户交互,CTreeCtrl会返回一些消息,最重要的是TVN_SELCHANGED(选中的item发生改变)。需要指定这些消息的处理函数。
6.CTreeCtrl提供了一系列的member function,使用它们可以改变控件的文本,图像,数据。
7.如果是使用create来创建CTreeCtrl,注意在合适的时间Destory它。