我想用Tree控件建立一个虚拟文件系统显示服务器的文件系统信息,包括显示,查询,等功能.虚拟文件系统包括子目录和文件
但由于不是本地文件系统,所以不知道要不要新建立类来描述这个虚拟文件系统? 貌似不用新建类的话,很难确定一个节点是文件还是目录,查询也不方便.各位有没有什么好的建议或者成功的办法? 谢谢.

解决方案 »

  1.   

    直接用Tree控件就可以,根据有无子节点来区分目录与文件。
      

  2.   

    如果只是想确定一个节点是文件还是目录,可以设置节点的附加数据(SetItemData)是否含有FILE_ATTRIBUTE_DIRECTORY 属性。
      

  3.   

    Tree控件的节点能不能带一个Text不显示的?  我的需求是每个文件要保存一个下载地址,这样的信息,树控件貌似不能保存。 
    PS:
    如果只是想确定一个节点是文件还是目录,可以设置节点的附加数据(SetItemData)是否含有FILE_ATTRIBUTE_DIRECTORY 属性。 
    这个BOOL SetItemData( HTREEITEM hItem, DWORD dwData );
    如果设置含有的话:
    SetItemData(hRoot,FILE_ATTRIBUTE_DIRECTORY); //文件
    但是如果想消除这个标志呢?
      

  4.   

    SetItemData(hRoot, GetItemData(hRoot) & ~FILE_ATTRIBUTE_DIRECTORY); //或设置为 0、FILE_ATTRIBUTE_NORMAL 等。如果要为节点设置更多的数据,可以定义一个结构或类来保存这些数据,如:
    typedef struct 
    {
       CString strDownloadURL;
       DWORD dwFileAttributes;
       int nSubFolders; //子目录个数
       int nFiles; //文件个数
    } MYFILE_DATA, * LPMYFILE_DATA;添加节点时使用 new 为结构分配内存,并将返回的指针作为节点的附加数据。
    删除节点前要先使用 delete 删除所分配的内存。
      

  5.   

    谢谢 LXW,但貌似BOOL SetItemText( HTREEITEM hItem, LPCTSTR lpszItem );或者InsertItem的
    参数都是已经固定的.
    所以下面这段我还不知道怎么用,能不能举个例子说明一下? 呵呵 如果要为节点设置更多的数据,可以定义一个结构或类来保存这些数据,如:
    typedef struct
    {
      CString strDownloadURL;
      DWORD dwFileAttributes;
      int nSubFolders; //子目录个数
      int nFiles; //文件个数
    } MYFILE_DATA, * LPMYFILE_DATA;添加节点时使用 new 为结构分配内存,并将返回的指针作为节点的附加数据。
    删除节点前要先使用 delete 删除所分配的内存。 
      

  6.   

    LPMYFILE_DATA pData = new MYFILE_DATA;
    //数据。
    pData->strDownloadURL = ...
    pData->dwFileAttributes = ...
    pData->nSubFolders = ...
    pData->nFiles = ...//使用 InsertItem 添加节点,然后设置节点的附加数据:
    SetItemData(hItem, (DWORD)pData);
    (也可以直接在 InsertItem 时,设置参数 LPARAM lParam 的值为 pData)使用数据:
    LPMYFILE_DATA pData = (LPMYFILE_DATA)GetItemData(hItem);
      

  7.   

    可以给文件夹下面添加节点,例如.和..或者(空)等。
    另外,文件夹和文件应该使用不同的Image,根据Image索引也可以区分。
      

  8.   

    谢谢LWX ,但还有一个问题:LPMYFILE_DATA* pData = NULL;
     pData = (LPMYFILE_DATA*)GetItemData(hItem); 
     if(pData!=NULL)
     {
     delete pData;
     pData = NULL;
     }
    没有添加附加数据的情况下,有的时候pData的值=0x0000000a,导致删除不了,不知道是什么原因?
      

  9.   

    貌似TCItem.item.lParam = 0;// (i+1)*10;//子项序号
    这个值不设为0就会有这个问题,估计设置为0也不会有影响吧?
      

  10.   

    如果节点没有附加数据,可以设置 ItemData 为 NULL (0)。