1.0 从工具箱中拖树型控件到对话框窗口,控件ID IDC_WEB_TREE ,如下图所示
2.0 在对话框头文件添加以下两个类对象
public:
CTreeCtrl m_TreeCtrl; //用于与控件相连
CImageList m_ImageListTree; //用于存放图片
3.0 控件与类对象相关连
void CTestDlg1::DoDataExchange(CDataExchange* pDX)
{
DDX_Control(pDX,IDC_WEB_TREE ,m_TreeCtrl); //此此添加的语句
CDialogEx::DoDataExchange(pDX);
}
4.0 对树型控件添加项目 ,可以在对话框初始化添加
m_ImageListTree.Create(24,24,ILC_COLOR24|ILC_MASK,1,1);
m_ImageListTree.Add(LoadIcon(AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_ICON1)));//IDI_ICON1
m_ImageListTree.Add(LoadIcon(AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_ICON2)));
m_TreeCtrl.SetImageList(&m_ImageListTree,TVSIL_NORMAL);
HTREEITEM hFriends=m_TreeCtrl.InsertItem(L"朋友",0,0);//根结点
m_TreeCtrl.InsertItem(L"家人",0,0);
m_TreeCtrl.InsertItem(L"小明",1,1,hFriends);
m_TreeCtrl.InsertItem(L"小华",1,1,hFriends);
//------------------------------------------------------------------------------------------------------------------------------------
关于函数解释
关于上面InsertItem函数参数解释,
第一个参数是项文本内容,
第二个参数是项正常显示时的图标
第三个参数是项被选中时显示的图标
获取选中项文本内容
可用GetSelectedItem获取选中项句柄,再用GetItemText函数根据项句柄获取项文本内容。如:
HTREEITEM hSelItem=m_TreeCtrl.GetSelectedItem();
CString itemText=m_TreeCtrl.GetItemText(hSelItem);
树视图复选框应用
可以在树视图控件属性窗口把树控件的样式设置具有复选功能,在更多样式里,勾上“复选框",这里要说明的是如何获取被复选的项文本内容,得用下面这几个函数:
GetRootItem该函数获取根结点,返回第一结点
GetChildItem该函数根据句柄,获取其下第一子结点句柄,无返回NULL
GetNextSiblingItem该函数根据句柄,获得同级下一个结点句柄,无则返回NULL.
GetCheck根据句柄判断结点是否被选中,选中返回BST_CHEKCED.(控件得有复选框属性)
首先得定义一个函数,这个函数遍历所有结点,每获取得一个结点,就用GetCheck函数判断是否被核记,核记了,就获取文本。
对节点树进行展开
//展开树
void CTestDlg1::MyExpandTree(HTREEITEM hTreeItem)
{
if(!m_TreeCtrl.ItemHasChildren(hTreeItem))//如果树控件根节点没有子节点则返回
{
return;
}
HTREEITEM hNextItem = m_TreeCtrl.GetChildItem(hTreeItem);//若树控件的根节点有子节点则获取根节点的子节点
while (hNextItem != NULL)//若有
{
MyExpandTree(hNextItem);//递归,展开子节点下的所有子节点
hNextItem = m_TreeCtrl.GetNextItem(hNextItem, TVGN_NEXT);//获取根节点的下一个子节点
}
m_TreeCtrl.Expand(hTreeItem,TVE_EXPAND);//展开节点
}
//调用上面函数
MyExpandTree(hFriends_Save); //展开
Invalidate(); //更新图
//点击树项的消息
TVN_SELCHANGD