使用CTreeCtrl
暮鼓集 行走集
原作於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它。