maple892 2013-12-03 13:51
浏览 3490

MFC的CTreeView的树的遍历

我在 CTreeViewOnInitialUpdate() 函数中写的插入树节点的代码
CTreeCtrl & TCtrl = GetTreeCtrl();
TCtrl.ModifyStyle(0,TVS_HASBUTTONS|TVS_HASLINES|TVS_LINESATROOT);
HTREEITEM father = TCtrl.InsertItem(_T("日常消费"));
m_HTree[0] = TCtrl.InsertItem(_T("2011-9-2"),father);
m_HTree[1] = TCtrl.InsertItem(_T("2011-1-1"),father);
m_HTree[2] = TCtrl.InsertItem(_T("2010-2-1"),father);

m_ado.OnInitODBC();//用的是数据库提取数据作为插入节点
CString sql;
sql.Format(_T("select * from TALLYCAT"));
m_pRecordset = m_ado.GetRecordset(_bstr_t(sql));//记录指针指向第1条记录
while(!m_pRecordset->adoEOF)
{
     **GetData()** ;
    if (m_date == "2010-2-1")
                 {
        if(TCtrl.ItemHasChildren(m_HTree[2]))//有子节点
        {               
        HTREEITEM brother = TCtrl.GetChildItem(m_HTree[2]);//得到父项的首个孩子的句柄
         **Search** (brother,m_HTree[2]);//遍历之后的兄弟节点  
        }
        else{TCtrl.InsertItem(m_type,m_HTree[2]);//插入首                       个孩子节点}
    }
    m_pRecordset->MoveNext();

}
Search 函数是这样的
void CTallyCatTreeView::Search(HTREEITEM brother,HTREEITEM father)
{
CTreeCtrl & TCtrl = GetTreeCtrl();
HTREEITEM bro = TCtrl.GetNextSiblingItem(brother);//得到下一个兄弟的句柄
if(bro != NULL)
{

CString str = TCtrl.GetItemText(bro);
if (!strcmp(m_type,str))
{

TCtrl.InsertItem(m_type,father);
}
else{Search(bro,father);}
}else{
TCtrl.InsertItem(m_type,father);
}
}

数据库是这样的
NUM NAME TYPE MONEY DATE
006 电冰箱 电器 2000 2010-2-1
007 电热毯 电器 200 2010-2-1
008 西红柿 食物 8 2010-2-1

GetData()函数主要是把数据库的数据付给CTreeView的成员变量
void CTallyCatTreeView::GetData(void)
{
m_date = (LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("DATE");
m_type = (LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("TYPE");
}
最后的显示是
2010-2-1的子节点分别是电器,电器,食物
但是我不想它重复阿,请帮帮我!
主要问题应该是search函数

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 乘性高斯噪声在深度学习网络中的应用
    • ¥15 运筹学排序问题中的在线排序
    • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
    • ¥30 求一段fortran代码用IVF编译运行的结果
    • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
    • ¥15 C++ 头文件/宏冲突问题解决
    • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
    • ¥50 安卓adb backup备份子用户应用数据失败
    • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
    • ¥30 python代码,帮调试,帮帮忙吧