16,472
社区成员
发帖
与我相关
我的任务
分享
void DirTreeView::OnInitialUpdate()
{
CTreeView::OnInitialUpdate();
CTreeCtrl &Tree=GetTreeCtrl();
LPSHELLFOLDER lpsf=NULL; //IShellFolder接口
LPITEMIDLIST lpi=NULL; //ITERMIDLSIT结构体指针
lpi=ILCreateFromPath(_T("E:\\"));//★
// HRESULT hr;
TV_ITEM tvi;
CImageList m_Image;//记录的是与树型控件关联的图像列表
SHFILEINFO sfi;//存放文件信息的结构
HIMAGELIST sys_small_icon;
sys_small_icon = (HIMAGELIST)SHGetFileInfo(NULL,0,&sfi,sizeof(sfi),
SHGFI_SYSICONINDEX|SHGFI_SMALLICON);
m_Image.Attach(sys_small_icon);
Tree.SetImageList(&m_Image,TVSIL_NORMAL);//将系统图像列表设为树控件的图象列表
m_Image.Detach ();
// 得到指向“桌面”的指针
// hr=SHGetDesktopFolder(&lpsf);
//SHGetSpecialFolderLocation(NULL,CSIDL_DESKTOP,&lpi);
// SHGetSpecialFolderLocation(NULL,CSIDL_DRIVES ,&lpi);
// if (SUCCEEDED(hr)) {
Tree.DeleteAllItems();
char szBuff[MAX_PATH];//存放显示名称的缓冲区
TV_INSERTSTRUCT tvis; //向树型控件中插入节点时使用的结构
tvi.mask = TVIF_TEXT | TVIF_IMAGE |
TVIF_SELECTEDIMAGE | TVIF_CHILDREN ; //设置要插入的树节点信息
if(GetName(lpsf,lpi,SHGDN_NORMAL,szBuff)==FALSE)
return;
tvi.pszText = szBuff;//设置显示名称
GetNormalAndSelectedIcons(lpi, &tvi);
tvis.item = tvi;
tvis.hParent = TVI_ROOT;
hParent = GetTreeCtrl().InsertItem(&tvis);//插入根节点
FillTreeView(lpsf, NULL, hParent);
GetTreeCtrl().Expand (hParent,TVE_EXPAND);//展开节点
lpsf->Release ();
ILFree(lpi);//★这句可能不应放在这里,应放在lpi指向内容不再使用时
// }
}
[/quote]赵老师,想来想去,觉得你的方法是对的,但是没有用过这个lpi=ILCreateFromPath(_T("E:\\"));,怎么声明它?每次运行都是不成功的void DirTreeView::OnInitialUpdate()
{
CTreeView::OnInitialUpdate();
CTreeCtrl &Tree=GetTreeCtrl();
LPSHELLFOLDER lpsf=NULL; //IShellFolder接口
LPITEMIDLIST lpi=NULL; //ITERMIDLSIT结构体指针
lpi=ILCreateFromPath(_T("E:\\"));//★
// HRESULT hr;
TV_ITEM tvi;
CImageList m_Image;//记录的是与树型控件关联的图像列表
SHFILEINFO sfi;//存放文件信息的结构
HIMAGELIST sys_small_icon;
sys_small_icon = (HIMAGELIST)SHGetFileInfo(NULL,0,&sfi,sizeof(sfi),
SHGFI_SYSICONINDEX|SHGFI_SMALLICON);
m_Image.Attach(sys_small_icon);
Tree.SetImageList(&m_Image,TVSIL_NORMAL);//将系统图像列表设为树控件的图象列表
m_Image.Detach ();
// 得到指向“桌面”的指针
// hr=SHGetDesktopFolder(&lpsf);
//SHGetSpecialFolderLocation(NULL,CSIDL_DESKTOP,&lpi);
// SHGetSpecialFolderLocation(NULL,CSIDL_DRIVES ,&lpi);
// if (SUCCEEDED(hr)) {
Tree.DeleteAllItems();
char szBuff[MAX_PATH];//存放显示名称的缓冲区
TV_INSERTSTRUCT tvis; //向树型控件中插入节点时使用的结构
tvi.mask = TVIF_TEXT | TVIF_IMAGE |
TVIF_SELECTEDIMAGE | TVIF_CHILDREN ; //设置要插入的树节点信息
if(GetName(lpsf,lpi,SHGDN_NORMAL,szBuff)==FALSE)
return;
tvi.pszText = szBuff;//设置显示名称
GetNormalAndSelectedIcons(lpi, &tvi);
tvis.item = tvi;
tvis.hParent = TVI_ROOT;
hParent = GetTreeCtrl().InsertItem(&tvis);//插入根节点
FillTreeView(lpsf, NULL, hParent);
GetTreeCtrl().Expand (hParent,TVE_EXPAND);//展开节点
lpsf->Release ();
ILFree(lpi);//★这句可能不应放在这里,应放在lpi指向内容不再使用时
// }
}
[/quote]error C2065: 'ILCreateFromPath' : undeclared identifier
434: //****************************************************************************
435: //
436: // BOOL FGetDirectory(LPTSTR szDir)
437: //
438: //****************************************************************************
439:
440: BOOL FGetDirectory(LPTSTR szDir)
441: {
442: BOOL fRet;
443: TCHAR szPath[MAX_PATH];
444: LPITEMIDLIST pidl;
445: LPITEMIDLIST pidlRoot;
446: LPMALLOC lpMalloc;
447:
448: BROWSEINFO bi = {
449: ghwndMain,
450: NULL,
451: szPath,
452: _szPickDir,
453: BIF_RETURNONLYFSDIRS,
454: NULL, 0L, 0 };
455:
456: if (0 != SHGetSpecialFolderLocation(HWND_DESKTOP, CSIDL_DRIVES, &pidlRoot))
457: return FALSE;
458: if (NULL == pidlRoot)
459: return FALSE;
460:
461: bi.pidlRoot = pidlRoot;
462: pidl = SHBrowseForFolder(&bi);
463:
464: if (NULL != pidl)
465: fRet = SHGetPathFromIDList(pidl, szDir);
466: else
467: fRet = FALSE;
468:
469: // Get the shell's allocator to free PIDLs
470: if (!SHGetMalloc(&lpMalloc) && (NULL != lpMalloc))
471: {
472: if (NULL != pidlRoot)
473: {
474: lpMalloc->Free(pidlRoot);
475: }
476:
477: if (NULL != pidl)
478: {
479: lpMalloc->Free(pidl);
480: }
481:
482: lpMalloc->Release();
483: }
484:
485: return fRet;
486: }