1. 程式人生 > >使用CTreeCtrl

使用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它。