ListView Icons



  • Also ich moechte in den einzelnen Items immer ein icon einbinden ( 16 x 16 )

    Wenn ich danach google find ich so gut wie nur MFC oder tausend zeiligen komplizierten Code.

    Kann mir jemand das in verstaendlichem deutsch und in WINAPI erklaeren ?



  • Hi, vllt hilft dir das:

    Das ist ein Ausschnit aus nem größeren Projekt von mir...
    Dürfte zu verstehen sein 😉 .

    // Image-List für das Icon:
    HIMAGELIST hImgList = ImageList_Create(GetSystemMetrics(SM_CXSMICON),
    					GetSystemMetrics(SM_CYSMICON),
    					ILC_COLORDDB | ILC_MASK, 1, 0);
    HICON hiNoLangsFound;
    hiNoLangsFound = LoadIcon(g_hmDllStyle, MAKEINTRESOURCE(ICO_NO_LANG_DLLS_FOUND));
    // Icon der Image-List hinzufügen:
    int iImgIndex = ImageList_AddIcon(hImgList, hiNoLangsFound);
    DestroyIcon(hiNoLangsFound); // <- GDI-Objekt freigeben
    ImageList_SetBkColor(hImgList, rgbListViewBkgnd); // <- Hintergrundfarbe des Controls festlegen
    ListView_SetImageList(hlsvLanguages, hImgList, LVSIL_SMALL); // <- Image-List zuweisen
    PTCHAR pszTemp;
    UINT   uiStrLen;
    // std::string strReSrc wird hier initialisiert...
    uiStrLen = strReSrc.length() + 1;
    pszTemp = new TCHAR[uiStrLen]; // <- lokale Stringkopie, wg. const-Return von c_str()-Methode
    StrNCpy(pszTemp, strReSrc.c_str(), uiStrLen); 
    LVITEM lvItem;
    lvItem.mask       = LVIF_IMAGE | LVIF_TEXT;
    lvItem.iSubItem   = 0;
    lvItem.iItem      = 0;
    lvItem.iImage     = iImgIndex;				
    lvItem.pszText    = pszTemp;
    lvItem.cchTextMax = uiStrLen;
    // Item hinzufügen:
    SendMessage(hlsvLanguages, LVM_INSERTITEM, 0,
    			reinterpret_cast<LPARAM>(&lvItem));
    delete [] pszTemp; // <- Speicher deallokieren
    

    EDIT: Text-Formatierung 😉



  • Also ich will sowas aehnliches wie Windows Explorer machen und habe das jetzt

    void GetOwnFiles()
    {
    	SendMessage(hEdit_OwnDrivers,LVM_DELETEALLITEMS,0,0);
    	SendMessage(hEdit_OwnFiles,LVM_DELETEALLITEMS,0,0);
    	char szBuffer[1024];
    	char filebuffer[MAX_PATH];
    	int nLoop = 0;
    	SHFILEINFO shInfo;
    	WIN32_FIND_DATA wfd;
    
    	LVITEM lvi0, lvi1;
    
    	lvi0.mask = LVIF_TEXT;
    	lvi0.iSubItem = 0;
    	lvi0.iImage = nLoop;
    
    	lvi1.mask = LVIF_TEXT;
    	lvi1.iSubItem = 0;
    
    	GetLogicalDriveStrings(1024, szBuffer);
    	char *pch = szBuffer;
    	ListView_SetExtendedListViewStyle(hEdit_OwnDrivers,LVS_EX_SUBITEMIMAGES);
    	HIMAGELIST g_hImageLst = ImageList_Create(16,16,ILC_MASK | ILC_COLOR32, 5, 0);
    	ZeroMemory(&shInfo, sizeof(SHFILEINFO));
    	ListView_SetImageList(hEdit_OwnDrivers, g_hImageLst, LVSIL_SMALL);
    
    	while (*pch) 
    	{		
    		lvi0.iItem = nLoop;
    		lvi0.pszText = pch;
    		lvi0.iImage = nLoop;
    
    		SHGetFileInfo(pch,FILE_ATTRIBUTE_NORMAL, &shInfo, sizeof(shInfo), SHGFI_USEFILEATTRIBUTES | SHGFI_DISPLAYNAME | SHGFI_TYPENAME | SHGFI_ICON | SHGFI_SMALLICON);	
    
    		ListView_InsertItem(hEdit_OwnDrivers,&lvi0);
    		ListView_SetItemText(hEdit_OwnDrivers,lvi0.iItem,0,pch);
    		ImageList_AddIcon(g_hImageLst, shInfo.hIcon);
    
    		pch = &pch[strlen(pch) + 1];
    		nLoop++;		
    	}	
    
    	nLoop = 0;
    
    	ListView_SetExtendedListViewStyle(hEdit_OwnFiles,LVS_EX_SUBITEMIMAGES);
    	HIMAGELIST g_hImageLst2 = ImageList_Create(16,16,ILC_MASK | ILC_COLOR32, 5, 5);
    	ZeroMemory(&shInfo, sizeof(SHFILEINFO));
    	ListView_SetImageList(hEdit_OwnFiles, g_hImageLst2, LVSIL_SMALL);
    
    	HANDLE fHandle=FindFirstFile(Dir,&wfd);
    		do
    		{
    			lvi1.iItem = nLoop;
    			if (!( (wfd.cFileName[0]=='.') && ( (wfd.cFileName[1]=='.' && wfd.cFileName[2]==0) || wfd.cFileName[1]==0 ) ))
    			{
    				if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
    				{
    					sprintf(filebuffer,"%s",wfd.cFileName);
    					lvi1.pszText = filebuffer;
    
    					SHGetFileInfo(0,FILE_ATTRIBUTE_DIRECTORY, &shInfo, sizeof(shInfo), SHGFI_USEFILEATTRIBUTES | SHGFI_DISPLAYNAME | SHGFI_TYPENAME | SHGFI_ICON | SHGFI_SMALLICON);	
    					ImageList_AddIcon(g_hImageLst2, shInfo.hIcon);
    
    					ListView_InsertItem(hEdit_OwnFiles,&lvi1);
    					ListView_SetItemText(hEdit_OwnFiles,lvi1.iItem,0,lvi1.pszText);
    					nLoop ++;
    
    				}
    			}
    		} while (FindNextFile(fHandle,&wfd));
    
    	FindClose(fHandle); 
    
    	fHandle=FindFirstFile(Dir,&wfd);
    		do
    		{
    			lvi1.iItem = nLoop;
    			if (!( (wfd.cFileName[0]=='.') && ( (wfd.cFileName[1]=='.' && wfd.cFileName[2]==0) || wfd.cFileName[1]==0 ) ))
    			{
    				if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
    				{
    
    				}
    				else
    				{
    					sprintf(filebuffer,"%s",wfd.cFileName);
    					lvi1.pszText = filebuffer;
    
    					SHGetFileInfo(filebuffer,FILE_ATTRIBUTE_NORMAL, &shInfo, sizeof(shInfo), SHGFI_USEFILEATTRIBUTES | SHGFI_DISPLAYNAME | SHGFI_TYPENAME | SHGFI_ICON | SHGFI_SMALLICON);	
    					ImageList_AddIcon(g_hImageLst2, shInfo.hIcon);
    
    					ListView_InsertItem(hEdit_OwnFiles,&lvi1);
    					ListView_SetItemText(hEdit_OwnFiles,lvi1.iItem,0,lvi1.pszText);
    					nLoop ++;
    				}
    			}
    		} while (FindNextFile(fHandle,&wfd));
    
    	FindClose(fHandle); 
    }
    

    Ich weiss den letzten Teil kann man einfacher machen.
    Hier das Ergebnis : http://img128.imagevenue.com/aAfkjfp01fo1i-25048/loc305/32530_ergebnis_123_305lo.jpg



  • lol, Jo Ergebnis:

    http://img128.imagevenue.com/aAfkjfp01fo1i-25048/loc305/32530_ergebnis_123_305lo.jpg schrieb:

    Not Found

    The requested URL /aAfkjfp01fo1i-25048/loc305/32530_ergebnis_123_305lo.jpg was not found on this server.
    Apache/2.0.52 (CentOS) Server at img128.imagevenue.com Port 80



  • Um.. naja das Ergebnis ist halt die Liste zeigt alle Dateien / Ordner an jedoch mit nur 1 und dem selben Icon (Ordner icon)


Anmelden zum Antworten