MFC 的 TreeCtrl 树形控件提供了设置背景色、文本色及线条色的接口,另外,通过递归查找,还可设置指定节点的图标和完整展开节点。在对话框初始化函数中额外添加代码:
m_userTreeCtrl.SetTextColor(RGB(0,0,220));//设置tree的背景色*/
m_userTreeCtrl.SetBkColor(RGB(230,230,230));//设置tree的背景色*/
// 设置TreeCtrl线条颜色
m_userTreeCtrl.SetLineColor(RGB(0, 150, 220));
ExpandAllNode(m_userTreeCtrl.GetRootItem(), m_userTreeCtrl); // 展开所有节点
// 载入图标,设置指定名称的节点的图标
HICON hIconOther = theApp.LoadIcon(IDI_VIDEO);
m_imageList.Add(hIconOther);
SetTreeNodeIcon(m_userTreeCtrl.GetRootItem(), m_userTreeCtrl, _T("测试用户13"));
其中的两个函数为:
void COnsitevideoDlg::SetTreeNodeIcon(HTREEITEM hStartItem, CTreeCtrl& treeCtrl, CString csNodeName)
{
HTREEITEM hChild = treeCtrl.GetChildItem(hStartItem);
while(hChild)
{
if(csNodeName == treeCtrl.GetItemText(hChild))
{
treeCtrl.SetItemImage(hChild, 3, 3);
return ;
} else {
SetTreeNodeIcon(hChild, treeCtrl, csNodeName);
hChild = treeCtrl.GetNextSiblingItem(hChild);
}
}
}
void COnsitevideoDlg::ExpandAllNode(HTREEITEM hItem, CTreeCtrl& treeShow)
{
HTREEITEM hChild = treeShow.GetChildItem(hItem);
while(hChild)
{
treeShow.Expand(hItem, TVE_EXPAND);
ExpandAllNode(hChild, treeShow);
hChild = treeShow.GetNextSiblingItem(hChild);
}
}
效果截图如下: