我想作一个类似MSDN左侧目录树结构,树节点从数据库中导入,树节点的级数可任意增加,结点中有目录和文档两种类型,当单击目录树时只扩展结点,当单击文档类型结点是在右边视中显示文档内容。哪里有类似示例VC++源码文件,送100分.

解决方案 »

  1.   

    先看一下这几个例子http://www.vckbase.com/document/viewdoc/?id=1215
    http://www.vckbase.com/document/viewdoc/?id=439
      

  2.   

    谢谢,我参考了示例略加修改实现了功能要求//递归调用,将数据库中的数据加入到列表项中
    void CTreeViewEx::TreeAddSubTree(INT pID, CString strChildTree, HTREEITEM hPartItem)
    {    if (strChildTree != "0")  //需要导入数据
    {
    CAdoRecordSet adoRec;  
            CAdoConnection con;     //因存在递归调用不能使用CAdoSQL类     if(con.ConnectSQLServer(theApp.g_tagIni.ComputerName, theApp.g_prj.aliasName,theApp.g_loginUser.name, theApp.g_loginUser.password))
    {
       TRACE("con联接成功\n");
           adoRec.SetAdoConnection(&con);
    }
    //--------------当前树节点------------------------
    HTREEITEM hCurrent;
    //----------------------------------------------
    CString strSQL,strCurItem,sID,tmp;
    //-----------------------------------------------
        sID.Format("%d",pID);
    strSQL="SELECT * FROM " + m_treeTable + " WHERE pID=" + sID ;
    try
    {
                //----------------------------------------------------
    adoRec.RunSqlText(strSQL);
    INT count =adoRec.GetRecordCount();
                if(count > 0)
            {
    adoRec.MoveFirst();
    if (!adoRec.IsEOF())
    {
    while(!adoRec.IsEOF())
    {
    CString addStr;
    adoRec.GetCollect("CLASS",addStr);
                                INT id,pid;
    adoRec.GetCollect("ID",id);
    adoRec.GetCollect("pID",pid);
                                if(pid!=0)
       hCurrent = m_pTreeCtrl->AddItem(addStr,2,3,hPartItem);
    else
    hCurrent = hPartItem;

    if (TreeSumRecordCount(id) > 0)  //当前子树下是否还有子树
    {
    adoRec.GetCollect("CLASS",tmp);
    TreeAddSubTree(id, tmp, hCurrent);
    }
                                if(!adoRec.IsEOF())       //当从第一次最深的循环完后,从些函数退出,又进入这一行执行
        adoRec.MoveNext();
    } //while }// if (!recSet.IsEOF()) } //if(count > 0)

    }   //end try
    catch(_com_error e)///捕捉异常
    {
     CString errormessage;
     MessageBox("创建记录集失败!");
    }
    }}