想要读出并且保存一个树型结构的数据,保存的数据可以供以后调用。 比较好的办法似乎是把数据读入一个树型控件中(CTreeCtl),但是现在不希望显示树型控件(因为只是一个类,没有界面)。而创建树型控件需要有一个父窗口的句柄,因此没有界面似乎就无法创建树型控件。很矛盾,不知道该怎么解决。
解决方案 »
- 使用CFileDialog能否设置工作路径?
- 主窗口背景刷新,但是子控件没有刷新
- 关于rand()的提问
- 如何用鼠标自由拖动线段的一个端?
- 自己正用VC开发一个基于WEB BROWSER 控件的对话框程序,因为NEWWINDOW2无法使用,想知道如何用BHO配合
- 在做TCP的客户端时,可否建立listenthread来监听服务器端???
- 请教高手一个CListview插入记录异常的问题
- 我是新人,请教一下怎么才能卸载安装没完成的VC
- OnNewDocument中调用AfxGetMainWnd的问题
- 怎么让一个project在编译的时候,首先编译stdafx.h?急!!在线等!!
- ListCtrl的问题
- 如何使CMenu自动隐藏?
http://www.codeproject.com/useritems/ctreectrl_xml.asp
讲各个属性保存到*.ini(或者注册表中)中,通过读取、写入section/key的方法进行操作。
具体如下:
【root】
root1= ;以结构体的形式保存到key中,结构中可以包含是否有child,节点section name等信息
root2= ;
【root1】
root1_1=;
root1_2=;
【root1_1】
void write(node)
{
write('0');
write(node.content);
for ( i = 0; i < node.childCount; ++i ) {
write('1');
write(child[i]);
}
write('2');
}void read(node)
{
for ( ;; ) {
flag = readchar;
switch (flag) {
case '0':
// the next will be content
read(node.content);
break;
case '1':
child = node.createChild();
read(child);
break;
}
if ( flag == '2' ) break;
}
}
使用的时候调用write(root)和read(root)即可
template<Class T>如此定义map:
typedef map<string, T> myMap;T既可以是string,也可以是某个节点下的树。但问题是使用模版的时候还是要给T指定一个类型,如果指定为string,那就不能得到树, 如果指定为myMap,因为其中有未指定的T,则通不过编译。 想了很多办法,但都不行,不知道这种办法到底可不可行。