谁给看看怎么TreeControll控件显示文件图标怎么都一样的?
下面是我的代码,麻烦大家给看看
(在VC那版发个贴子,半天没人应, 重发个)
//初始化树
void CEncryptingFileSystemDlg::InitTree()
{
SHFILEINFO finfo;
m_inTree.SetImageList(&m_iconImage, TVSIL_NORMAL);
//初始化驱动盘,并添加作为树根
char *inpDriver,inbuf[50]={0};
//得到所有驱动盘号
GetLogicalDriveStrings(sizeof(inbuf),inbuf);
//依次添加作为根
for(inpDriver=inbuf;*inpDriver;inpDriver+=strlen(inpDriver)+1)
{
//叶子节点结构体
TVINSERTSTRUCT tvInsert;
tvInsert.hParent = NULL;
tvInsert.hInsertAfter = NULL;
tvInsert.item.mask = TVIF_TEXT;
tvInsert.item.pszText = inpDriver;
SHGetFileInfo(inpDriver, 0, &finfo, sizeof(finfo), SHGFI_SMALLICON|SHGFI_ICON);
m_iconImage.Add(finfo.hIcon);
SHGetFileInfo(inpDriver, 0, &finfo, sizeof(finfo), SHGFI_OPENICON|SHGFI_SMALLICON|SHGFI_ICON);
m_iconImage.Add(finfo.hIcon);
HTREEITEM hDriver = m_inTree.InsertItem(&tvInsert);
//设置节点数据为1,表示该节点已经展开过,在再次展开时不用再进行绑定!
m_inTree.SetItemData(hDriver,1);
m_iconImage.Remove(0);
m_iconImage.Remove(0);
//以此驱动盘为根,在其下查找文件进行绑定
InsertNode(inpDriver, hDriver);
}
}
//插入节点函数,参数1是父节点路径,参数2是父节点句柄
void CEncryptingFileSystemDlg::InsertNode(CString szPath, HTREEITEM hNode)
{
HANDLE hFile;
WIN32_FIND_DATA wData;
szPath+="\\*";
hFile=FindFirstFile(szPath,&wData);
//查找失败
if(hFile==INVALID_HANDLE_VALUE)
return;
do
{
SHFILEINFO finfo;
//过滤2个特殊文件夹"."和".."
if(wData.cFileName[0]=='.')
continue;
SHGetFileInfo(wData.cFileName, 0, &finfo, sizeof(finfo), SHGFI_SMALLICON|SHGFI_ICON);
m_iconImage.Add(finfo.hIcon);
//如果查找到的文件是个文件夹
if(wData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
SHGetFileInfo(inpDriver, 0, &finfo, sizeof(finfo), SHGFI_OPENICON|SHGFI_SMALLICON|SHGFI_ICON);
m_iconImage.Add(finfo.hIcon);
HTREEITEM hTemp=m_inTree.InsertItem(wData.cFileName,0,1,hNode,TVI_SORT);
//添加一个临时节点来显示+号
m_iconImage.Remove(1);
m_inTree.InsertItem(NULL,0,0,hTemp,TVI_SORT);
}
else
{
m_inTree.InsertItem(wData.cFileName,0,0,hNode,TVI_SORT);
}
m_iconImage.Remove(0);
}while(FindNextFile(hFile,&wData));
}