Привет, уважаемые форумчане. Пишу файловый менеджер. Для отображения иконок файлов пользуясь функцией SHGetFileInfo(......). Но порблема в том что какои первый фаил наидет такими будут все остальные иконки. Пишу на Visual studio 2010 C++, MFC WinAPi .Пожайлуста помогите. Вот отрывок кода :
HICON CFilemanagerDlg::GetFileInfo(CString str)
{
UINT uFlags = SHGFI_ICON | SHGFI_ICONLOCATION | SHGFI_LARGEICON | SHGFI_DISPLAYNAME | SHGFI_SHELLICONSIZE | SHGFI_SYSICONINDEX | SHGFI_EXETYPE ;
CString tmp = (LPCWSTR)str;
memset(&m_sf,0,sizeof(m_sf));
HICON hicon;
CImageList * m_pImage = new CImageList();
m_pImage->Attach((HIMAGELIST)SHGetFileInfo(tmp,0,&m_sf,sizeof(m_sf),uFlags));
hicon = m_pImage->ExtractIcon(m_sf.iIcon);
m_pImage->Detach();
return hicon;
}
А Вот функция где вызывается GetFileInfo:
void CFilemanagerDlg::findFiles(int &count, CString &dtemp, BOOL isRefrashe)
{
CFileFind find;
count = 0; // Количество элемент в list control
CString temp;// временная переменная для хранения адресса из адрессной edit box-а которая характеризуется переменным-членом m_str
HICON h;// handle иконок
BOOL f;
temp = m_str; // Это переменные CString в которых->
str0 = temp; // ->сохраняются старые и новые пути каталогов->
dtemp = temp; // ->и файлов для навигации по директориям
int index; // Это индекс иконок в image list
CImageList* imgList = new CImageList();
imgList->Create(32,32,ILC_MASK | ILC_COLOR32,0,0);
if(isRefrashe == true)
temp = str0;
f = find.FindFile(temp+"\\*");
while(f)
{
f = find.FindNextFile();
if(find.IsDots())
continue;
str = find.GetFilePath();
temp = str;
str0 = str;
/*(******)*/ h = GetFileInfo(str); //
CollapsedExpandedWrap enabledWrap disabledLine numbers onLine numbers off
ВОТ ЗДЕСЬ И ВЫЗЫВАЕТСЯ GetFileInfo()
if(h == 0)
{
MessageBox((LPCTSTR)_T("Error icon handle"),(LPCTSTR)_T("Error !"),MB_ICONSTOP);
exit(-1);
}
index = imgList->Add(h);
DestroyIcon(h);
m_list.InsertItem(count,str);
count++;
}
m_list.SetImageList(imgList, TVSIL_NORMAL);
find.Close();
}
26.05.11 11:57: Перенесено из 'C/C++'