Problem beim Erstellen von List-View-Control



  • Hi könnt ihr mir sagen warum der folgende Code nicht funktioniert :

    // CommonControl initialisieren:
    			INITCOMMONCONTROLSEX iccexCommonCtrls;
    			iccexCommonCtrls.dwSize = sizeof(INITCOMMONCONTROLSEX);
    			iccexCommonCtrls.dwICC  = ICC_LISTVIEW_CLASSES;
    			InitCommonControlsEx(&iccexCommonCtrls);
    
    			// List-View erstellen:
    			hlsvLanguages = CreateWindowEx
    				(
    				  WS_EX_CLIENTEDGE, WC_LISTVIEW, NULL,
    				  WS_CHILD | WS_VISIBLE | LVS_LIST, 20, 60,
    				  lDlgWidth - 40, lDlgHeight - 120,
    				  hDlg, reinterpret_cast<HMENU>(LSV_LANGUAGES),
    				  g_hInst, NULL
    				);
    			// Schrift setzen:
    			SendMessage(hlsvLanguages,
    						WM_SETFONT,
    						reinterpret_cast<WPARAM>(GetStockObject(DEFAULT_GUI_FONT)),
    						0L);
    			SendMessage(hlsvLanguages, LVM_DELETEALLITEMS, 0, 0L);
    			if(SendMessage(hlsvLanguages, LVM_GETITEMCOUNT, 0, 0L) == 0L)
    			{
    				cAcceptBtn.Enable(false);
    				pszReSrcStr = GetResourceString(g_hmDllLang, STR_NO_LANG_DLLS_FOUND);		
    				MessageBox(0,pszReSrcStr,0,0);
    				HIMAGELIST hImgList = ImageList_Create(GetSystemMetrics(SM_CXICON),
    													   GetSystemMetrics(SM_CYICON),
    													   ILC_COLOR24, 1, 1);
    				HICON hiNoLangsFound;
    				hiNoLangsFound = LoadIcon(g_hmDllStyle, MAKEINTRESOURCE(ICO_NO_LANG_DLLS_FOUND));
    				int iImgIndex = ImageList_AddIcon(hImgList, hiNoLangsFound);			
    				DestroyIcon(hiNoLangsFound);
    				if(SendMessage(hlbxLanguages,
    							LVM_SETIMAGELIST,
    							static_cast<WPARAM>(LVSIL_NORMAL),
    							reinterpret_cast<LPARAM>(hImgList)) == NULL)
    							MessageBox(0, "Fehler beim zuweisen der ImageList",0,0);
    				LVITEM lvItem;
    				lvItem.mask		  = LVIF_IMAGE | LVIF_STATE | LVIF_TEXT;
    				lvItem.state	  = LVIS_SELECTED;
    				lvItem.stateMask  = 0;
    				lvItem.iSubItem	  = 0;
    				lvItem.iImage	  = iImgIndex;
    				lvItem.iItem	  = 0;
    				lvItem.pszText	  = pszReSrcStr;
    				lvItem.cchTextMax = lstrlen(pszReSrcStr);
    				if(SendMessage(hlbxLanguages,
    							   LVM_INSERTITEM, 0,
    							   reinterpret_cast<LPARAM>(&lvItem)) != -1)
    					MessageBox(0,"<Alles OK>",0,0);
    				FreeResourceString(pszReSrcStr); // <- Speicher deallokieren
    			}
    

    VIelen dank für eure Mühen, wär echt wichtig! 😉

    PS In der 1. MsgB. steht der richtige Text, der Aufruf der Funktion GetResourceString funktioniert also, die 2. wird (leider) auch angezeigt und die dritte MessageBox zeigt '<Alles OK>' an -> 😕 😕 😕

    Tja bin echt ratlos... 😕



  • hlsvLanguages != hlbxLanguages

    ps: dürftige fehlerbeschreibung



  • miller_m schrieb:

    hlsvLanguages != hlbxLanguages

    ps: dürftige fehlerbeschreibung

    Hm ich fand die Beschr. ausreichend...du hast das Hauptprobl. ja gelößt....DANKE!, wie konnt ich das nur übersehen....

    Aber warum kann er die ImageList nicht zuweisen:

    // CommonControl initialisieren:
    			INITCOMMONCONTROLSEX iccexCommonCtrls;
    			iccexCommonCtrls.dwSize = sizeof(INITCOMMONCONTROLSEX);
    			iccexCommonCtrls.dwICC  = ICC_LISTVIEW_CLASSES;
    			InitCommonControlsEx(&iccexCommonCtrls);
    
    			// List-View erstellen:
    			hlsvLanguages = CreateWindowEx
    				(
    				  WS_EX_CLIENTEDGE, WC_LISTVIEW, NULL,
    				  WS_CHILD | WS_VISIBLE | LVS_LIST, 20, 60,
    				  lDlgWidth - 40, lDlgHeight - 120,
    				  hDlg, reinterpret_cast<HMENU>(LSV_LANGUAGES),
    				  g_hInst, NULL
    				);
    			// Schrift setzen:
    			SendMessage(hlsvLanguages,
    						WM_SETFONT,
    						reinterpret_cast<WPARAM>(GetStockObject(DEFAULT_GUI_FONT)),
    						0L);
    			SendMessage(hlsvLanguages, LVM_DELETEALLITEMS, 0, 0L);
    			if(SendMessage(hlsvLanguages, LVM_GETITEMCOUNT, 0, 0L) == 0L)
    			{
    				cAcceptBtn.Enable(false);
    				pszReSrcStr = GetResourceString(g_hmDllLang, STR_NO_LANG_DLLS_FOUND);
    				HIMAGELIST hImgList = ImageList_Create(GetSystemMetrics(SM_CXICON),
    													   GetSystemMetrics(SM_CYICON),
    													   ILC_COLOR16, 1, 1);
    				if(hImgList == NULL)
    					MessageBox(0,0,0,0);
    				HICON hiNoLangsFound;
    				hiNoLangsFound = LoadIcon(g_hmDllStyle, MAKEINTRESOURCE(ICO_NO_LANG_DLLS_FOUND));
    				if(hiNoLangsFound == NULL)
    					MessageBox(0,0,0,0);
    				int iImgIndex = ImageList_AddIcon(hImgList, hiNoLangsFound);			
    				if(iImgIndex == -1)
    					MessageBox(0,0,0,0);
    				DestroyIcon(hiNoLangsFound);
    				if(SendMessage(hlsvLanguages, LVM_SETIMAGELIST,
    							static_cast<WPARAM>(LVSIL_NORMAL),
    							reinterpret_cast<LPARAM>(hImgList)) == NULL)
    							MessageBox(0, "Fehler beim zuweisen der ImageList",0,0);
    				LVITEM lvItem;
    				lvItem.mask		  = LVIF_IMAGE | LVIF_STATE | LVIF_TEXT;
    				lvItem.state	  = LVIS_SELECTED;
    				lvItem.stateMask  = 0;
    				lvItem.iSubItem	  = 0;
    				lvItem.iImage	  = iImgIndex;
    				lvItem.iItem	  = 0;
    				lvItem.pszText	  = pszReSrcStr;
    				lvItem.cchTextMax = lstrlen(pszReSrcStr);
    				SendMessage(hlsvLanguages, LVM_INSERTITEM, 0,
    							reinterpret_cast<LPARAM>(&lvItem));
    				FreeResourceString(pszReSrcStr); // <- Speicher deallokieren
    			}
    

    Das Icon wird erfolgreich geladen, aber das zuweisen funzt nicht... es wird lediglich diese MessageBox angezeigt:
    MessageBox(0, "Fehler beim zuweisen der ImageList",0,0);
    Er erstellt zwar den Eintrag (endlich 🙂 ) aber der hat kein Icon



  • Ok gelößt...man darf beim zuweisen der ImgList nicht LVSIL_NORMAL, sondern LVSIL_SMALL angeben, wenn man das ListView Control mit LVS_LIST erstellt hat...also bis man darauf kommt -.- 😮



  • Hui, hab noch n Problem...:

    Weiß vllt. jemand wie ich an die Zusatzdaten eines Eintrags herankomme (also lvItem.lParam) ?
    Das Item kann ich nicht anhand des Textes identifizieren, da sich dieser laufend ändert...

    Gibts nicht so eine Nachricht, ähnlich wie bei Listboxen..LB_GETITEMDATA...oder so?

    Vielen Dank für weitere Hilfe 👍


Anmelden zum Antworten