现在有一个TreeView,在设计时是空的,所有结点和子节点都是运行时添加的.   
当我下次打开这个程序的时候,我想看到上次保存的节点信息?  
请问如何解决这个问题? 添加节点部分代码如下:
void CTreeControlDlg::OnButtonInsert() 
{
// TODO: Add your control notification handler code here
TV_INSERTSTRUCT tvStruct; UpdateData(TRUE); if (!m_strText.IsEmpty() )
{
tvStruct.hParent = m_hSelectedNode;
tvStruct.hInsertAfter = TVI_LAST;
tvStruct.item.mask = TVIF_TEXT; tvStruct.item.pszText = (LPTSTR)(LPCSTR)m_strText;
m_treeControl.InsertItem(&tvStruct); m_treeControl.Expand(m_hSelectedNode,TVE_EXPAND);
}
else
AfxMessageBox("Please input the FTP!");
m_strText.Empty();
UpdateData(FALSE);
}

解决方案 »

  1.   

    BOOL CTreeControlDlg::OnInitDialog() 
    {
    CDialog::OnInitDialog();

    // TODO: Add extra initialization here

    TV_INSERTSTRUCT tvStruct; tvStruct.hParent = 0;
    tvStruct.hInsertAfter = TVI_LAST;
    tvStruct.item.mask = TVIF_TEXT;
    tvStruct.item.pszText = "Input FTP";
    m_hRoot = m_treeControl.InsertItem(&tvStruct);
    return TRUE;  // return TRUE unless you set the focus to a control
                  // EXCEPTION: OCX Property Pages should return FALSE}
    初始化部分源代码
      

  2.   

    建个数据库,将你添加的节点保存到数据库中,每次打开时,在OnInitDialog()中通过数据库中的数据添加节点,你在上次运行时,添加了节点,在下次一打开时就会调用你上次保存在数据库中的数据了,也就会看到你保存的节点信息了。
      

  3.   

    建数据库要在SQL中,在那建好的数据库中再建一个表,
    表的内容可以根据你添加节点的内容进行定义
    在OnInitDialog()中打开你的那个数据库,
    访问保存节点的那个表再将有关数据取出,
    可以用这些数据初始化你的树,为其添加节点
      

  4.   

    数据库会不会太麻烦?我建一个.dat文件可以么??访问保存节点的那个表再将有关数据取出,
    可以用这些数据初始化你的树,为其添加节点需要代码部分啊!!!!
    给出代码 立即给分 
      

  5.   

    void CHousingEstateTree::FillTreeNode(HTREEITEM parent, CString infoID)
    {
    CAdoConnection conn;
    TV_INSERTSTRUCT TreeCtrlItem;
    HTREEITEM SubTreeItem;
    conn.Open("Provider=SQLOLEDB.1;Persist Security Info=True;User ID=sa;Initial Catalog=PropertyManagement;Data Source=zhang");
    CAdoRecordSet rs(&conn);
    CString strSql,str, strType; strSql.Format("select NAME, PICID, TYPE from JXNF_CELL where INFOID = '%s' ", infoID); rs.Open(strSql);
    while (!rs.IsEOF())
    {
    str = rs.GetCollectStr(0);
    infoID = rs.GetCollectStr(1);
    strType = rs.GetCollectStr(2);
    TreeCtrlItem.hInsertAfter = TVI_LAST;
    TreeCtrlItem.item.mask = TVIF_TEXT|TVIF_PARAM|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
    TreeCtrlItem.item.iImage = m_nImageClose;
    TreeCtrlItem.item.iSelectedImage = m_nImageOpen;
    TreeCtrlItem.item.lParam = 0;
    TreeCtrlItem.item.cchTextMax = 20; TreeCtrlItem.item.pszText = str.GetBuffer(str.GetLength());
    TreeCtrlItem.hParent = parent;
    if(strType != "ElementCell" && strType != "RoomCell")
    {
    SubTreeItem = this->InsertItem(&TreeCtrlItem);
    FillTreeNode(SubTreeItem, infoID);
    }
    rs.MoveNext();
    }
    conn.Close();
    }
    这是我自己写的一个,可以参考,CAdoConnection,CAdoRecordSet是两个访问数据库的类。
      

  6.   

    FILE *ft;
    _TreeControlInfo site;
    char strContents[20];
    char strLabel[20];
    char strAddress[20];
    char strPasswd[20];

    ft = fopen("TreeControl.dat","rt");
    fseek(ft,0,SEEK_SET); while(fscanf(ft,"%s %s",strContents,strLabel) !=-1)
    {
            HTREEITEM hItem = GetTreeCtrl().GetNextItem(hRoot, TVGN_CHILD);
            HTREEITEM hCurItem = GetTreeCtrl().GetNextItem(hRoot, TVGN_CHILD); CString Label = strLabel;
    CString Contents = strContents; if( Label == "-1" )
    {
    tvStruct.hParent = hRoot;
    tvStruct.hInsertAfter = TVI_LAST;
    tvStruct.item.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE;
    tvStruct.item.iImage = 1;
    tvStruct.item.iSelectedImage = 1;
    tvStruct.item.pszText = strContents;
    GetTreeCtrl().InsertItem(&tvStruct);
    }
    else
    {
    while( hCurItem )
    {
    if( Contents == GetTreeCtrl().GetItemText(hCurItem) )
    {
    tvStruct.hParent = hCurItem;
    tvStruct.hInsertAfter = TVI_LAST;
    tvStruct.item.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE;
    tvStruct.item.iImage = 2;
    tvStruct.item.iSelectedImage = 2;
    tvStruct.item.pszText = strLabel;
    GetTreeCtrl().InsertItem(&tvStruct);
    }

    hCurItem = GetTreeCtrl().GetNextItem(hCurItem, TVGN_NEXT);
    }
    }
    } fclose(ft);
    }
    这个是我的调用.dat文件的代码
    是否符合你说的
    访问保存节点的那个表再将有关数据取出,
    可以用这些数据初始化你的树,为其添加节点
    ???
      

  7.   

    这个是我的msn:[email protected]
    如果您有时间我可以给你看看我的源代码。
    帮帮忙吧!!!谢谢