CTreeView树视类使用

新建以CTreeView为视基类的单文档应用程序。

树控件通常和图像列表控件一起使用,在树控件中可以显示图像列表中的图标,即为树控件添加图标。

(1)创建位图

在资源编辑器中,添加一个包括所有图标的位图资源,在此位图中每个图标都是16*16像素大小,用户可以改变大小,不过必须为正方形。

(2)添加用于存放图像列表的成员变量

 CImageList m_image;

(3)创建并设置图像列表

m_image.Create(IDB_IMAGE,16,1,RGB(255,255,255));//位图ID 16*16大小 新图像列表中图标数目为一个  白色为透明色

m_TreeCtrl.SetImageList(&m_ImageList,TVSIL_NORMAL); //设置图象列
TCItem.item.lParam=0;//序号
TCItem.item.iImage=0;//正常图标
TCItem.item.iSelectedImage=1;//选中时图标

(4)指定条目图标
CTreeCtrl::InsertItem和SetItemImage的参数条目都需要两个不同的图像值,一个用于选中一个用于未选中,可以相同

(5)设置状态图像,例如使用选中态和清除态复选框来表示条目状态,条目状态的12~15位指定了以1为基的状态图像索引(0表示没有状态图像),最多15个

 m_TreeCtrl.SetImageList(&m_ImageState,TVSIL_STATE);//TVSIL for SetImageList STATE
 //指定状态图标注意TVSIL_STATE

m_TreeCtrl.SetItemState(hRoot,INDEXTOSTATEIMAGEMASK(1),TVIS_STATEIMAGEMASK);//索引为1的设为状态图像

(6)设置覆盖图像

条目状态的8~11位指定覆盖图像

 

BOOL CImageList::SetOverlayImage(
   int nImage,
   int nOverlay 
);

nImage 以0为基的图像索引,

nOverlay以1为基的覆盖图像索引,使用的是包含控件条目图像的图像列表对象。

//设置覆盖图像
 m_ImageList.SetOverlayImage(0,1);
 m_ImageList.SetOverlayImage(1,2);
 //将条目状态图像设置为使用覆盖图像
 m_TreeCtrl.SetItemState(hRoot,INDEXTOOVERLAYMASK(2),TVIS_OVERLAYMASK);//使用第一个覆盖图像
 m_TreeCtrl.SetItemState(hRoot,INDEXTOOVERLAYMASK(0),TVIS_OVERLAYMASK);//清除覆盖图像

在view类添加图像列表控件,向工程中导入想要显示的图标资源。

 

public:
 
 CImageList m_ImageList;

资源中添加两个图标,一个为选中时,一个为未选中

CTreeCtrl& m_TreeCtrl=GetTreeCtrl();;
	//pTree.Create(TVS_LINESATROOT|TVS_HASLINES|TVS_HASBUTTONS|WS_BORDER|LVS_SHOWSELALWAYS,CRect(0,0,0,0),this,10001); 
	//创建树控件
	m_ImageList.Create(16,16,ILC_COLOR,3,0); //大小为16*16的
	
	m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON_CHECK));
	
	m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON_SELECT));
	
    m_TreeCtrl.SetImageList(&m_ImageList,TVSIL_NORMAL); //设置图象列
	char * CJ[4]={"玉溪卷烟厂","云南卷烟厂","沈阳卷烟厂","成都卷烟厂"};//根数据名称
	char * PM[4][5]={ {"红梅一","红梅二","红梅三","红梅四","红梅五"},//产品数据项
	{"白梅一","白梅二","白梅三","白梅四","白梅五"}, {"绿梅一","绿梅二","绿梅三","绿梅四","绿梅五"}, {"青梅一","青梅二","青梅三","青梅四","青梅五"}};
	
	int i,j;
	
	HTREEITEM hRoot,hCur;//树控制项目句柄
	TV_INSERTSTRUCT TCItem;//插入数据项数据结构
	TCItem.hParent=TVI_ROOT;//增加根项
	TCItem.hInsertAfter=TVI_LAST;//在最后项之后
	TCItem.item.mask=TVIF_TEXT|TVIF_PARAM|TVIF_IMAGE|TVIF_SELECTEDIMAGE;//设屏蔽
	TCItem.item.pszText="数据选择";
	
	TCItem.item.lParam=0;//序号
	TCItem.item.iImage=0;//正常图标
	TCItem.item.iSelectedImage=1;//选中时图标
	hRoot=m_TreeCtrl.InsertItem(&TCItem);//返回根项句柄
	for(i=0;i<4;i++){//增加各厂家
		TCItem.hParent=hRoot;
		
		TCItem.item.pszText=CJ[i];
		
		TCItem.item.lParam=(i+1)*10;//子项序号
		hCur=m_TreeCtrl.InsertItem(&TCItem);
		
		for(j=0;j<5;j++){//增加各产品
			TCItem.hParent=hCur;
			
			TCItem.item.pszText=PM[i][j];
			
			TCItem.item.lParam=(i+1)*10+(j+1);//子项序号
			m_TreeCtrl.InsertItem(&TCItem); }
		
		m_TreeCtrl.Expand(hCur,TVE_EXPAND);//展开树
	} 
	
	m_TreeCtrl.Expand(hRoot,TVE_EXPAND);//展开上一级树

 

 

 

 

BOOL Create( int cx, int cy, UINT nFlags, int nInitial, int nGrow );

BOOL Create( UINT nBitmapID, int cx, int nGrow, COLORREF crMask );

BOOL Create( LPCTSTR lpszBitmapID, int cx, int nGrow, COLORREF crMask );

BOOL Create( CImageList& imagelist1, int nImage1, CImageList& imagelist2, int nImage2, int dx, int dy );

BOOL Create( CImageList* pImageList );


Return Value

Nonzero if successful; otherwise 0.

cx每个图像宽度,像素数
cy每个图像高度,像素数

 

nFlags

Specifies the type of image list to create. This parameter can be a combination of the following values, but it can include only one of theILC_COLOR values.

Value Meaning
ILC_COLOR Use the default behavior if none of the other ILC_COLOR* flags is specified. Typically, the default is ILC_COLOR4; but for older display drivers, the default is ILC_COLORDDB.
ILC_COLOR4 Use a 4-bit (16 color) device-independent bitmap (DIB) section as the bitmap for the image list.
ILC_COLOR8 Use an 8-bit DIB section. The colors used for the color table are the same colors as the halftone palette.
ILC_COLOR16 Use a 16-bit (32/64k color) DIB section.
ILC_COLOR24 Use a 24-bit DIB section.
ILC_COLOR32 Use a 32-bit DIB section.
ILC_COLORDDB Use a device-dependent bitmap.
ILC_MASK Uses a mask. The image list contains two bitmaps, one of which is a monochrome bitmap used as a mask. If this value is not included, the image list contains only one bitmap.

nInitial初始包含的图像数量.

nGrow新图像列表中的图标数目

nBitmapID与图像列表关联的位图资源IDs

crMask掩码颜色,也就是说使用此颜色的所有像素将被设为透明色。 Each pixel of this color in the specified bitmap is changed to black, and the corresponding bit in the mask is set to one.

lpszBitmapID

A string containing the resource IDs of the images.

imagelist1

A reference to a CImageList object.

nImage1

Index of the first existing image.

imagelist2

A reference to a CImageList object.

nImage2

Index of the second existing image.

dx

Offset of the x-axis of the second image in relationship to the first image, in pixels.

dy

Offset of the y-axis of the second image in relationship to the first image, in pixels.

pImageList

A pointer to a CImageList object.

Remarks

You construct a CImageList in two steps. First call the constructor, then call Create, which creates the image list and attaches it to theCImageList object.

Example

// The pointer to my image list.
extern CImageList* pmyImageList;

pmyImageList->Create(32, 32, ILC_COLOR8, 0, 4);

 

 

你可能感兴趣的:(CTreeView树视类使用)