void navtreeview::newdirectory()
{
HTREEITEM hitem=GetTreeCtrl().GetSelectedItem();
CString str;
str=getpathfromitem(hitem)+_T("\\新建文件夹");
int i=1;
BOOL rename=FALSE;
    while(::CreateDirectory(str,NULL)==FALSE)//避开已有的“新建文件夹”自动在文件夹名字上加(i)
   {
      if(rename==FALSE)
     str=str+_T("(")+itos(i)+_T(")");
  else
              str.SetAt(str.GetLength()-2,(itos(i))[0]);
  i+=1;
      rename=TRUE;
   }                                                  if(!GetTreeCtrl().GetChildItem(hitem))               //如果没有子文件夹,加入标记文件夹
{
GetTreeCtrl().InsertItem(_T(""),0,0,hitem);
}    GetTreeCtrl().Expand(hitem,TVE_COLLAPSE|TVE_COLLAPSERESET);//重设expand标识
    GetTreeCtrl().Expand(hitem,TVE_EXPAND);
}现在的问题是
1  当我在一个已有的(就是不是通过我的程序添加的)文件夹(比如说MUSIC)下创建新文件夹时一切正常,如果MUSIC是个空文件夹,那么newdirectory()加入一个“新建文件夹”后,小+号就会出现,点击后正常展开和收拢。
2  但是如果是在newdirectory()创建的“新建文件夹”里再添加一个子目录“新建文件夹”(我下面用新2表示),就有问题了。  出错过程如下
  添加完毕后GetTreeCtrl().InsertItem(_T(""),0,0,hitem)执行----小+号出现-----GetTreeCtrl().Expand(hitem,TVE_EXPAND)执行----小+号变成-号并展开显示新2------(到这里一切正常)-------单击-号收拢,+号出现-------单击+号再也无法展开进驱动器看,新文件夹确实都已经创建了,而且也可以打开。
进资源管理器发现进资源管理器的TREE导航栏在“新建文件夹”左边没有加号!但是的确有一个新2在里边!
请问是哪一步出了纰漏?

解决方案 »

  1.   

    查看点击“+”的事件   响应函数是否正确   TVN_SELCHANGED  函数是否添加  代码应该都在这里面添加
      

  2.   

    我是挨个函数跟踪下来了的,都没有问题, 甚至到最后OnItemExpanding函数里 
    insertitem(name,0,0,hitem) 都已经通过了的 其中name是“新建文件夹”(也就是上面提到的新2)
    问题就是insertitem过后好像什么都没发生过一样!还有一个现象,如果再新建入一个和新2同级的文件夹(比如说新2.1)就一切OK了,+点击正常展开,收拢后也可以正常展开
    也就是说只新建入一个就不行,新建两个后恢复正常!
      

  3.   

    AddDirectory里的ncount返回值是不是正确设置了?
      

  4.   

    不可思议的问题,居然expand成功与否和ncount的返回值数目有那么大关系