高分求教树型控件操作的问题

时间:2022-03-29 09:30:20
我刚开始学习使MFC,关于树型控件有很多地方不明白。也翻了很多书,可是没找到答案。希望大家能帮忙

我在对话框上加了一个树型控件,用一个按钮对树进行添加节点。

pTree=(CTreeCtrl*)GetDlgItem(IDC_TREE)
m_hItemCurr = pTree->GetSelectedItem();
m_hItemBook=pTree->InsertItem(str,0,0,m_hItemCurr,m_hItemBook);

大概就是这样添加的。

我的问题:
1.我用VC中的资源编辑器在树控件的属性中把“编辑卷标”勾上后,每个插入的节点都可以编辑名字了。但无法保存。比如插入时默认名字是“分类”。改成“计算机”。但选择别的节点时又会变回“分类”。

2.再有就是不知道怎么保存这个动态添加的树。能让程序下次启动时重新载入上次已经建立的树。

3.我想让每个节点都保存一个文件的路径,就是类似点击节点后打开一个文件这样的功能。看到有的朋友说使用数据库。不知道有没有不用数据库的方法。一个节点只能存储额外的4字节的信息吗?

对MFC还很不了解。找了很多关于树型控件的资料但大多都没涉及到保存。希望高手能多给点详细的解决思路

6 个解决方案

#1


自顶一下吧

#2


建议用xml保存树控件信息,另外也能根据xml建树

http://www.codeproject.com/KB/tree/ctreectrl_xml.aspx

#3


我有实例
很简单的
已经学会了

#4


CStringArray csa;
GetDirectFile(UPDATADATE_DIRECT,csa);
static CImageList m_Image;
m_Image.Create(16,16,ILC_COLOR|ILC_MASK,3,1);
m_Image.Add(AfxGetApp()->LoadIcon(IDI_ICON2));
m_Image.Add(AfxGetApp()->LoadIcon(IDI_ICON3));
m_Image.Add(AfxGetApp()->LoadIcon(IDI_ICON4));
m_Mend.SetImageList(&m_Image,TVSIL_NORMAL);
DWORD dwStyles=GetWindowLong(m_Mend.m_hWnd,GWL_STYLE);

dwStyles=dwStyles|TVS_EDITLABELS|TVS_HASBUTTONS|TVS_HASLINES|TVS_LINESATROOT;;
SetWindowLong(m_Mend.m_hWnd,GWL_STYLE,dwStyles);

HTREEITEM hRoot,hCur;
TV_INSERTSTRUCT ti;
ti.hParent=TVI_ROOT;
ti.hInsertAfter=TVI_LAST;
ti.item.mask=TVIF_TEXT|TVIF_PARAM|TVIF_IMAGE|TVIF_SELECTEDIMAGE;;
ti.item.lParam=0;
ti.item.iImage=0;
ti.item.iSelectedImage=1;
ti.item.pszText="更新文件列表";
hRoot=m_Mend.InsertItem(&ti);
for(int i=2;i<csa.GetSize();i++)
{
CString psz;
psz=csa.GetAt(i);
ti.hParent=hRoot;
ti.item.iImage=2;
ti.item.iSelectedImage=2;
ti.item.pszText=psz.GetBuffer(0);
ti.item.lParam=i-1;
hCur=m_Mend.InsertItem(&ti);
}

#5


[img=http://s2.photo.store.qq.com/http_imgload.cgi?/rurl4_b=a1609042088096e6bc23232587a2908aaaf78be4f474123f2c097fc7a7fbac3403003ad161d12db3eaad8e6fe90aac03c2f1bb720c1a0f551bd96a2f3659a2602cf3f00f058bba69aa28c30ca70d17e9e6a4ea51][/img]
效果如上

#6


引用 3 楼 etz2008 的回复:
我有实例 
 很简单的 
 已经学会了 
 


这位朋友能和你交流一下吗?想具体请教你一下。能留下个联系方式吗

#1


自顶一下吧

#2


建议用xml保存树控件信息,另外也能根据xml建树

http://www.codeproject.com/KB/tree/ctreectrl_xml.aspx

#3


我有实例
很简单的
已经学会了

#4


CStringArray csa;
GetDirectFile(UPDATADATE_DIRECT,csa);
static CImageList m_Image;
m_Image.Create(16,16,ILC_COLOR|ILC_MASK,3,1);
m_Image.Add(AfxGetApp()->LoadIcon(IDI_ICON2));
m_Image.Add(AfxGetApp()->LoadIcon(IDI_ICON3));
m_Image.Add(AfxGetApp()->LoadIcon(IDI_ICON4));
m_Mend.SetImageList(&m_Image,TVSIL_NORMAL);
DWORD dwStyles=GetWindowLong(m_Mend.m_hWnd,GWL_STYLE);

dwStyles=dwStyles|TVS_EDITLABELS|TVS_HASBUTTONS|TVS_HASLINES|TVS_LINESATROOT;;
SetWindowLong(m_Mend.m_hWnd,GWL_STYLE,dwStyles);

HTREEITEM hRoot,hCur;
TV_INSERTSTRUCT ti;
ti.hParent=TVI_ROOT;
ti.hInsertAfter=TVI_LAST;
ti.item.mask=TVIF_TEXT|TVIF_PARAM|TVIF_IMAGE|TVIF_SELECTEDIMAGE;;
ti.item.lParam=0;
ti.item.iImage=0;
ti.item.iSelectedImage=1;
ti.item.pszText="更新文件列表";
hRoot=m_Mend.InsertItem(&ti);
for(int i=2;i<csa.GetSize();i++)
{
CString psz;
psz=csa.GetAt(i);
ti.hParent=hRoot;
ti.item.iImage=2;
ti.item.iSelectedImage=2;
ti.item.pszText=psz.GetBuffer(0);
ti.item.lParam=i-1;
hCur=m_Mend.InsertItem(&ti);
}

#5


[img=http://s2.photo.store.qq.com/http_imgload.cgi?/rurl4_b=a1609042088096e6bc23232587a2908aaaf78be4f474123f2c097fc7a7fbac3403003ad161d12db3eaad8e6fe90aac03c2f1bb720c1a0f551bd96a2f3659a2602cf3f00f058bba69aa28c30ca70d17e9e6a4ea51][/img]
效果如上

#6


引用 3 楼 etz2008 的回复:
我有实例 
 很简单的 
 已经学会了 
 


这位朋友能和你交流一下吗?想具体请教你一下。能留下个联系方式吗