编译没有错误,运行就有错,但是我不知道是什么原因造成的错误,因为我是初学,没能找出错误的原因,调试时错误也不在我写的代码里面。

解决方案 »

  1.   

    //添加树风格和图像
    void CLeftTreeView::AddStyleImage()
    {
    //设置树风格
    ::SetWindowLong(m_hWnd,WS_VISIBLE|WS_TABSTOP|WS_CHILD|WS_BORDER|GWL_STYLE,TVS_HASBUTTONS|TVS_LINESATROOT|TVS_HASLINES|TVS_DISABLEDRAGDROP|TVS_SHOWSELALWAYS);

    //为树视图添加图标
    m_ImageList.Create(IDB_TREE,16,16,ILC_COLOR);
    CTreeCtrl *m_pTree=&GetTreeCtrl(); //获取树指针
    m_pTree->SetImageList(&m_ImageList,TVSIL_NORMAL); //设置图像列表}
    //添加关系到树
    HTREEITEM CLeftTreeView::AddRapportToTree(CString strRapport)
    {
    TV_INSERTSTRUCT tvInsert; //定义插入项的数据结构信息
    tvInsert.hParent=TVI_ROOT; //父项句柄为根目录
    tvInsert.hInsertAfter=TVI_LAST; //插入位置在树的最后面
    tvInsert.item.mask=TVIF_TEXT|TVIF_PARAM|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
    tvInsert.item.lParam=0; //应用程序自定义的消息参数
    tvInsert.item.iImage=0; //该项的图标索引号是在CImageList对象中
    tvInsert.item.iSelectedImage=0; //选中时图标
    tvInsert.item.pszText=(LPTSTR)(LPCSTR)strRapport; //项的文本
    CTreeCtrl *m_pTree=&GetTreeCtrl(); //获取树指针
    HTREEITEM hRapportItem=m_pTree->InsertItem(&tvInsert); //插入项
    return hRapportItem;
    }
    //添加姓名到树
    void CLeftTreeView::AddNameToTree(HTREEITEM hRapportItem,CString strName)
    {
    CTreeCtrl *m_pTree=&GetTreeCtrl(); //获取树指针
    //CString strRapport=m_pTree->GetItemText(hRapportItem); //获取项的文本
    //if(strRapport!="")
    //{
    // while ()
    //}
    TV_INSERTSTRUCT tvInsert; //定义插入项的数据结构信息
    tvInsert.hParent=hRapportItem; //父项句柄为根目录
    tvInsert.hInsertAfter=TVI_LAST; //插入位置在树的最后面
    tvInsert.item.mask=TVIF_TEXT|TVIF_PARAM|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
    tvInsert.item.lParam=0; //应用程序自定义的消息参数
    tvInsert.item.iImage=0; //该项的图标索引号是在CImageList对象中
    tvInsert.item.iSelectedImage=0; //选中时图标
    tvInsert.item.pszText=(LPTSTR)(LPCTSTR)strName; //项的文本

    HTREEITEM hNameItem=m_pTree->InsertItem(&tvInsert);
    }
    //添加树
    void CLeftTreeView::AddTree(CString strRapport,CString strName)
    {

    //将关系添加到树
    HTREEITEM hRapportItem=AddRapportToTree(strRapport);
    //将姓名添加到树
    AddNameToTree(hRapportItem,strName);

    }void CLeftTreeView::OnInitialUpdate() 
    {
    CTreeView::OnInitialUpdate();

    // TODO: Add your specialized code here and/or call the base class

    CTreeCtrl* m_pTree=&GetTreeCtrl();
    m_pTree->DeleteAllItems(); //删除树中的所有结点 AddStyleImage(); //设置树的风格

    //从数据库中读取数据
    _RecordsetPtr m_pRecordset; //定义记录集对象
    CString strSQL,strRapport,strName; //SQL语句\关系值\姓名值 
    strSQL.Format("select Rapport,Name from UserCommunications");
    CAddressListApp* m_pApp=(CAddressListApp*)AfxGetApp();
    try
    {
    HRESULT hr=m_pRecordset.CreateInstance("ADODB.Recordset");
    if(!hr)
    {
    hr=m_pRecordset->Open(strSQL.AllocSysString(),m_pApp->m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
    while(!m_pRecordset->adoEOF)
    {
    _variant_t var;
    var=m_pRecordset->GetCollect("Rapport"); //关系
    if(var.vt!=VT_NULL)
    {
    strRapport=(char*)(_bstr_t)var;
    } var=m_pRecordset->GetCollect("Name"); //姓名
    if(var.vt!=VT_NULL)
    {
    strName=(char*)(_bstr_t)var;
    } //添加树
    AddTree(strRapport,strName); m_pRecordset->MoveNext();
    }

    }
    m_pRecordset->Close();
    }
    catch(_com_error e)
    {
    AfxMessageBox(e.ErrorMessage());
    }
    }
      

  2.   

    阿门!
    数据库ADO接口,树控件,哪个是省油的灯?还说简单呢.
      

  3.   

    看看有没有指针成功为了NULL的或没有初始化
      

  4.   

    就是树视图不对,报错信息说FILE:winsplitt.cpp,我跟踪调试了,但找不出原因,我可以把程序发给你们,请高手们帮帮忙呀