现在有一个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);
}
当我下次打开这个程序的时候,我想看到上次保存的节点信息?
请问如何解决这个问题? 添加节点部分代码如下:
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);
}
{
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}
初始化部分源代码
表的内容可以根据你添加节点的内容进行定义
在OnInitDialog()中打开你的那个数据库,
访问保存节点的那个表再将有关数据取出,
可以用这些数据初始化你的树,为其添加节点
可以用这些数据初始化你的树,为其添加节点需要代码部分啊!!!!
给出代码 立即给分
{
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是两个访问数据库的类。
_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文件的代码
是否符合你说的
访问保存节点的那个表再将有关数据取出,
可以用这些数据初始化你的树,为其添加节点
???
如果您有时间我可以给你看看我的源代码。
帮帮忙吧!!!谢谢