LPMALLOC pMalloc;
::SHGetMalloc(&pMalloc); LPITEMIDLIST pid;
::SHGetSpecialFolderLocation(GetSafeHwnd(),CSIDL_DRIVES,&pid); IShellFolder *pDesktop,*pComputer;
::SHGetDesktopFolder(&pDesktop);
pDesktop->BindToObject(pid,NULL,IID_IShellFolder,(void **)&pComputer); IEnumIDList* pList;
pDesktop->EnumObjects(GetSafeHwnd(),SHCONTF_FOLDERS | SHCONTF_NONFOLDERS,&pList);
LPITEMIDLIST temp;
while(S_FALSE != pList->Next(1,&temp,NULL))
{
SHFILEINFO sfi;
::SHGetFileInfo((LPCTSTR)temp,0,&sfi,sizeof(SHFILEINFO),SHGFI_ICON  |   SHGFI_PIDL   |   SHGFI_DISPLAYNAME); 
m_imagelist.Add(sfi.hIcon);
m_RemoteList.InsertItem(m_RemoteList.GetItemCount(),sfi.szDisplayName ,m_RemoteList.GetItemCount());
} pMalloc->Free(pid);
pMalloc->Release();
pComputer->Release();
pDesktop->Release();
pList->Release();这段代码不能获得文件的图标啊,而且好像sfi.szTypeName返回的也是空的字符串~~不知道是什么回事~~

解决方案 »

  1.   

    看不出来哪里错你要获取文件图标,用下面代码
    SHFILEINFO shfi;memset (&shfi, 0, sizeof(shfi));
    SHGetFileInfo (_T("c:\\123.doc"), //文件名
       FILE_ATTRIBUTE_NORMAL, &shfi,
       sizeof (shfi), SHGFI_ICON | SHGFI_USEFILEATTRIBUTES);HICON hIcon = CopyIcon (shfi.hIcon);
    DestroyIcon (shfi.hIcon);
    ......................