想要读出并且保存一个树型结构的数据,保存的数据可以供以后调用。 比较好的办法似乎是把数据读入一个树型控件中(CTreeCtl),但是现在不希望显示树型控件(因为只是一个类,没有界面)。而创建树型控件需要有一个父窗口的句柄,因此没有界面似乎就无法创建树型控件。很矛盾,不知道该怎么解决。

解决方案 »

  1.   

    存储和提取的例子:
    http://www.codeproject.com/useritems/ctreectrl_xml.asp
      

  2.   

    可以这样作:
      讲各个属性保存到*.ini(或者注册表中)中,通过读取、写入section/key的方法进行操作。
      具体如下:
      【root】
         root1=   ;以结构体的形式保存到key中,结构中可以包含是否有child,节点section name等信息
         root2=    ;
         
      【root1】
         root1_1=;
         root1_2=;
      【root1_1】
      

  3.   

    谢谢,但大家似乎没有明白我的意思。这是个后台的程序,只是个中间过程,再去构造一个ini似乎不妥。
      

  4.   

    偶以前曾用过递归的方式来存。以下是大概的思路:
    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)即可
      

  5.   

    superarhow(苏泊尔耗) 的程序 看不大明白, node是树控件的节点吗?现在考虑用模版来做,
    template<Class T>如此定义map:
    typedef map<string, T>  myMap;T既可以是string,也可以是某个节点下的树。但问题是使用模版的时候还是要给T指定一个类型,如果指定为string,那就不能得到树, 如果指定为myMap,因为其中有未指定的T,则通不过编译。    想了很多办法,但都不行,不知道这种办法到底可不可行。