使用CTreeCtrl

版权声明:© Jie Zhuang 署名-非商用使用-禁止演绎 (CC BY-NC-ND 2.5) https://blog.csdn.net/jez/article/details/85762120

暮鼓集    行走集

原作于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它。

猜你喜欢

转载自blog.csdn.net/jez/article/details/85762120
今日推荐