Непонятки с SHGetFileInfo()...
От: spacetime  
Дата: 25.05.11 17:09
Оценка:
Привет, уважаемые форумчане. Пишу файловый менеджер. Для отображения иконок файлов пользуясь функцией 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++'
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.