这个例子,主要是查找树上的某个节点,并展开选中它。采用来了递归方法来实现。主要用到的方法:
CTreeCtrl::GetChildItem
HTREEITEM GetChildItem( HTREEITEM hItem );
返回值:如果成功则返回该子项的句柄;否则返回NULL。
采用递归的思想,把每个遍历到的节点都当作根节点对待,然后遍历他里面的儿子节点。
儿子节点又当作根节点,这样反复,直到真正的根节点都遍历完了,整个过程就结束了。说得不清楚,看代码一目了然。
按钮代码
void CForTreeCtrlDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
vector<HTREEITEM>vecItem;
HTREEITEM root = treeCtrl.GetRootItem();
//第一层根节点
while (root != NULL) {
vecItem.push\_back(root);
root = treeCtrl.GetNextItem(root, TVGN\_NEXT);
}
for (int q = (int)vecItem.size() - 1; q > -1; q--) {
func(vecItem\[q\], m\_find);
}
}
递归函数
void CForTreeCtrlDlg::func(HTREEITEM root,CString condition) {
CString itemText = treeCtrl.GetItemText(root);
if (itemText.Find(condition) != -1) {
treeCtrl.SelectItem(root);
treeCtrl.SetCheck(root, TRUE);
treeCtrl.Expand(root, TVM\_EXPAND);
return;
}
//根节点的儿子节点
HTREEITEM A1 = treeCtrl.GetChildItem(root);
//儿子节点的兄弟节点
vector<HTREEITEM>vecItem;
while (A1 != NULL) {
vecItem.push\_back(A1);
A1 = treeCtrl.GetNextItem(A1, TVGN\_NEXT);
}
for (int q = (int)vecItem.size() - 1; q > -1; q--) {
CString itemText = treeCtrl.GetItemText(vecItem\[q\]);
if (itemText.Find(condition) != -1) {
treeCtrl.SelectItem(vecItem\[q\]);
treeCtrl.SetCheck(vecItem\[q\], TRUE);
treeCtrl.Expand(vecItem\[q\], TVM\_EXPAND);
vecItem.clear();
return;
}
else {
//递归,儿子节点当作根节点遍历
func(vecItem\[q\], condition);
}
}
}
构建treeCtrl节点代码
// TODO: 在此添加额外的初始化代码
CString root\[2\] = { TEXT("A"),TEXT("B") };
for (int i=0;i<2;i++)
{
HTREEITEM r =treeCtrl.InsertItem(root\[i\], NULL);
CString str;
for (int j=0;j<3;j++)
{
str.Format(TEXT("%s%d"),root\[i\], j + 1);
HTREEITEM j1 = treeCtrl.InsertItem(str, r);
CString str1;
for (int m = 0; m < 3; m++) {
str1.Format(TEXT("%s%d%d"), root\[i\], j + 1,m+1);
HTREEITEM m1 = treeCtrl.InsertItem(str1, j1);
CString str2;
for (int q = 0; q < 3; q++) {
str2.Format(TEXT("%s%d%d%d"), root\[i\], j + 1, m + 1,q+1);
HTREEITEM q1 = treeCtrl.InsertItem(str2, m1);
CString str3;
for (int s = 0; s < 3; s++) {
str3.Format(TEXT("%s%d%d%d%d"), root\[i\], j + 1, m + 1, q + 1,s+1);
HTREEITEM s1 = treeCtrl.InsertItem(str3, q1);
}
}
}
}
}
手机扫一扫
移动阅读更方便
你可能感兴趣的文章