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
