树控件学习:http://blog.csdn.net/shuilan0066/article/details/6638504
方法很多,常用到的有这两个:截图:
方法一:(加 ico图标,一个一个的加,4*16*16)
准备4张16*16的ico图片
(在树已经可以正常显示的情况下)
在 Dlg.h中声明:CImageList imagelist;
在Dlg.cpp中:
Dlg::BuildTree() 下:
建立 imagelist :
imagelist.Create(16, 16, ILC_COLOR8|ILC_MASK, 0, 4);
imagelist.Add(AfxGetApp()->LoadIcon(IDI_TREEBOOT)); // ico图标
imagelist.Add(AfxGetApp()->LoadIcon(IDI_TREEFATHER));
imagelist.Add(AfxGetApp()->LoadIcon(IDI_TREECHILD)); //图标个数随意加,多加几个也行
m_deviceTree.SetImageList(&imagelist, TVSIL_NORMAL); // 建立 imagelist 与 tree的映射关系
----------------------------------------------------------------------------------------------------------------------------------------------------------------
第三个参数:确定创建的图象列表类型。
ILC_COLORDDB 使用设备独立位图
ILC_MASK 使用掩码。图象列表包含两个位图,其中一个是用做掩码的位图。如果不包括此值,图象列表只包含一个位图
第四个参数:图象列表最初包含的图象数。
第五个参数:当系统需要改变列表为新图象准备空间时,图象列表可生成的图象数。此参数替代改变的图象列表所能包含的新图象数。
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
然后往根节点插图:m_hItemroot = m_deviceTree.InsertItem(_T("根节点"), 0, 1, TVI_ROOT); //0 表示不选时是第一张图,1表示选择时是第二张图。
往父节点(根节点的儿子):
HTREEITEM hItemGroup = m_deviceTree.InsertItem(A2T(pGroupInfo->m_groupBaseInfo.m_szName), 1, 1, m_hItemroot); //跟上面的一样 ,最后一个参数表示此节点是根节点的儿子节点。
往叶子节点(父节点的儿子):
HTREEITEM hItemDevice = m_deviceTree.InsertItem(A2T(devInfo.m_baseInfo.m_szName), 2, 2, hItemGroup);//跟上面一样
展开树:
m_deviceTree.Expand(hItemGroup, TVE_EXPAND);
m_deviceTree.Expand(m_hItemroot, TVE_EXPAND);
方法二:(加 bmp图片,64*16,一张图片上有4张16*16的小图)方法跟第一个差不多 ,
在 Dlg.h中声明:CImageList imagelist;
在Dlg.cpp中:
Dlg::BuildTree() 下:
建立 imagelist :
imagelist.Create(IDB_BITMAP_STUDENT, 16, 0, RGB(0, 255, 0)); // 64*16的bmp图片,16表示一张图显示的宽度m_deviceTree.SetImageList(&imagelist, TVSIL_NORMAL); //跟tree建立映射关系
...
m_deviceTree.SetItemImage(m_hItemroot, 0, 1); //根节点 插图 0,1 表示:0 表示不选时是第一张图,1表示选择时是第二张图。
... m_deviceTree.SetItemImage(hItemGroup, 0, 1); //父节点插图
...m_deviceTree.SetItemImage(hItemDevice, 3, 3); //叶子节点
树背景颜色及文字颜色设置:
m_deviceTree.SetTextColor(RGB(0, 0, 0)); //文本
m_deviceTree.SetBkColor(RGB(240, 240, 240)); //背景
树的遍历:
void CDeviceTreeDlg::ChangeDeviceImage()
{
HTREEITEM m_hItemRoot = m_devGroupTree.GetRootItem();
if (NULL == m_hItemRoot)
{
return;
}
HTREEITEM m_hItemGroup = m_devGroupTree.GetChildItem(m_hItemRoot);
while(NULL != m_hItemGroup)
{
HTREEITEM m_hItemDevice = m_devGroupTree.GetChildItem(m_hItemGroup);
while(NULL != m_hItemDevice)
{
CDevice* pDevi = (CDevice*)m_devGroupTree.GetItemData(m_hItemDevice);
if (pDevi->m_bOnLine)
{
m_devGroupTree.SetItemImage(m_hItemDevice, 3, 3);
}
m_hItemDevice = m_devGroupTree.GetNextSiblingItem(m_hItemDevice);
}
m_hItemGroup = m_devGroupTree.GetNextSiblingItem(m_hItemGroup);
}
}