Es wird nur ein icon im TreeView angezeigt!
-
Hallo zusammen ;),
ich habe ein funktionierendes TreeView (SDI/Windows Explorer Style) gekodet, aber leider fast ohne Icons.
Nun möchte ich nicht irgendwelche icons sondern die orig. Windows Explorer Icons.
Ich benutze dazu die FunktionSHGetFileInfo("", 0, &sfi, sizeof(SHFILEINFO), SHGFI_SYSICONINDEX | SHGFI_SMALLICON)Ich bekomme aber nicht alle sondern nur ein einziges Icon angezeigt (siehe Link)
:
http://filehosting.at/images/download.php?file=b14ad20aa1a01412004995061e3202bbIch möchte nicht zuviel Cide posten um niemanden zu erschlagen, daher hier nur zwei kleine Auszüge :
**1. Hier werden die LaufwerksBuchstaben und Labels ermittelt etc. :
**void CLeftView::CreateRoots() { CString strMessage; int nPos = 65; CString strDrive; TCHAR szLabel[128]; DWORD dwVolumeSerialNumber; DWORD dwMaxNameLength; DWORD dwFileSystemFlags; TCHAR szFileSysName[128]; UINT uDriveType; CString cstrWirDir; TCHAR infoBuf[INFO_BUFFER_SIZE]; DWORD dwDriveList = GetLogicalDrives (); // Anzahl der Laufwerke ermitteln //---------------------------------------------------------------------------------------------------------------- GetWindowsDirectory(infoBuf, INFO_BUFFER_SIZE); cstrWirDir = infoBuf; cstrWirDir = cstrWirDir.GetAt(0); cstrWirDir = cstrWirDir + ":"; //---------------------------------------------------------------------------------------------------------------- while (dwDriveList) { if (dwDriveList & 1) { strDrive = "?:\\"; strDrive.SetAt (0,nPos); uDriveType = GetDriveType(strDrive); GetVolumeInformation (strDrive, szLabel, sizeof( szLabel ) - 1, &dwVolumeSerialNumber, &dwMaxNameLength, &dwFileSystemFlags, szFileSysName, sizeof( szFileSysName ) - 1); switch(uDriveType) { // ToDo: Wenn kein Name für Diskettenlaufwerk(und andere), dann vorgefertigtes Label case 2: // Diskettenlaufwerk strDrive = strDrive.Left(2); InsertFileItem("3½-Diskette (" + strDrive +")"); break; case 3: // Festplatte strDrive = strDrive.Left(2); // AfxMessageBox(strDrive, MB_OK); InsertFileItem((CString)szLabel + " (" + strDrive +")"); break; case 5: // CD-Rom strDrive = strDrive.Left(2); InsertFileItem((CString)szLabel + " (" + strDrive +")"); break; default: break; } } dwDriveList >>= 1; nPos++; } }2. Hier wird oder sollte zumindest der Baum gebaut werden:
void CLeftView::InsertFileItem(const CString sFile) { CTreeCtrl &trCtrl = this->GetTreeCtrl(); trCtrl.SetImageList(&m_SysImageList.GetImageList(), TVSIL_NORMAL); SHFILEINFO sfi; SHGetFileInfo(sFile, 0, &sfi, sizeof(SHFILEINFO),SHGFI_SYSICONINDEX | SHGFI_SMALLICON); //Gibt den IconIndex des Files/Datei zurück int nIconIndex; nIconIndex = sfi.iIcon; //Hängt das aktuelle Item an CString sTemp = sFile; TV_INSERTSTRUCT tvis; ZeroMemory(&tvis, sizeof(TV_INSERTSTRUCT)); tvis.hParent = TVI_ROOT; tvis.hInsertAfter = TVI_LAST; tvis.item.mask = TVIF_CHILDREN | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_TEXT; tvis.item.pszText = sTemp.GetBuffer(sTemp.GetLength()); tvis.item.iImage = nIconIndex; trCtrl.InsertItem(&tvis); sTemp.ReleaseBuffer(); }Ich weis nicht ob das genug Code ist um den fehler zu finden, deshalb habe ich hier mal das kleine Projekt (besteht nur aus TreeView) hochgeladen:
http://www.filehosting.at/files/download.php?file=1cadb172342f4f83577c45e72addfc42Vielen Dank für eure Hilfe vorab

Gruß
ShadowEaterP.S.: Wenn das ganze dann funktioniert wäre es vllt. was für die FAQ?
-
Hi,
Problem gelöst !

Gruß
ShadowEater