Schwierige ListView probleme,-> Freeman(ich) braucht dringend Hilfe!
-
Hallo! Ich probiere grad, einen listview Fenster zu erstellen, aber ich bekomme immer den Fehler Nummer 8(ERROR_NOT_ENOUGH_MEMORY), von diesem Funktion: ListView_SetImageList(hwndLV, himlLarge, LVSIL_NORMAL) != NULL);
(Ich bekomme kein Comple-time, oder Link-time Fehler)//////////////IM HEADER: ////////// /* Struct */ struct regdata { char username[USERNAME_LENGTH]; char pass[PASS_LENGTH]; char fullname[FULLNAME_LENGTH]; char emil[EMIL_LENGTH]; char birthday[BIRTH_LENGTH]; int level; //kliens nem töltheti ki/kliens kitöltése figyelmen kívűl hagyandó }; //////////////////////ListView///////////////////////// HWND initListView(HINSTANCE hinst,HWND hwndParent){ HWND hList; LVCOLUMN LvCol; // Make Coluom struct for ListView InitCommonControls(); hList = CreateWindow(WC_LISTVIEW, "", WS_CHILD | WS_VISIBLE | LVS_ICON | /*LVS_EDITLABELS |*/ WS_BORDER | WS_TABSTOP , 0, 0, CW_USEDEFAULT, CW_USEDEFAULT,hwndParent, NULL, hinst, NULL); if(hList == NULL){ Error("Hiba a user manager ablak(ListView control failed) készítésekor"); } if(!InitListViewImageLists(hList,hinst)){//elsőnek kell initializálni!!! Error("Ikonlista betöltése sikertelen!"); } SendMessage(hList,LVM_SETTEXTBKCOLOR, 0,(LPARAM)CLR_NONE); SendMessage(hList,LVM_SETEXTENDEDLISTVIEWSTYLE,0,LVS_EX_FULLROWSELECT); // Set style // Here we put the info on the Coulom headers // this is not data, only name of each header we like memset(&LvCol,0,sizeof(LvCol)); // Reset Coluom LvCol.mask=LVCF_TEXT|LVCF_WIDTH|LVCF_SUBITEM; // Type of mask LvCol.cx=0x28; // width between each coloum LvCol.pszText="Állapot"; // First Header LvCol.cx=0x42; // Inserting Couloms as much as we want SendMessage(hList,LVM_INSERTCOLUMN,0,(LPARAM)&LvCol); // Insert/Show the coloum LvCol.pszText="Felhasználónév"; // Next coloum SendMessage(hList,LVM_INSERTCOLUMN,1,(LPARAM)&LvCol); // ... LvCol.pszText="Jelszó"; // SendMessage(hList,LVM_INSERTCOLUMN,2,(LPARAM)&LvCol); // LvCol.pszText="Teljes név"; // SendMessage(hList,LVM_INSERTCOLUMN,3,(LPARAM)&LvCol); // LvCol.pszText="E-mail"; // SendMessage(hList,LVM_INSERTCOLUMN,4,(LPARAM)&LvCol); // LvCol.pszText="Születési dátum"; // SendMessage(hList,LVM_INSERTCOLUMN,5,(LPARAM)&LvCol); // ...same as above return hList; } BOOL AppendListItem(HWND hList,struct regdata REG){ BOOL bSuccess=0; LVITEM LvItem; memset(&LvItem,0,sizeof(LvItem)); // Reset Item Struct // Setting properties Of Items: LvItem.mask=LVIF_TEXT | LVIF_IMAGE; // Text Style LvItem.cchTextMax = 256; // Max size of text LvItem.iItem=ListView_GetItemCount(hList); // choose item LvItem.iSubItem=0; // Put in first coluom LvItem.pszText="Icon helye"; LvItem.iImage=REG.level; bSuccess =SendMessage(hList,LVM_INSERTITEM,0,(LPARAM)&LvItem); // Send to the Listview LvItem.iSubItem=1; LvItem.pszText=REG.username; bSuccess &=SendMessage(hList,LVM_SETITEM,0,(LPARAM)&LvItem); // Enter text to SubItems LvItem.iSubItem=2; LvItem.pszText=REG.pass; bSuccess &=SendMessage(hList,LVM_SETITEM,0,(LPARAM)&LvItem); // Enter text to SubItems LvItem.iSubItem=3; LvItem.pszText=REG.fullname; bSuccess &=SendMessage(hList,LVM_SETITEM,0,(LPARAM)&LvItem); // Enter text to SubItems LvItem.iSubItem=4; LvItem.pszText=REG.emil; bSuccess &=SendMessage(hList,LVM_SETITEM,0,(LPARAM)&LvItem); // Enter text to SubItems LvItem.iSubItem=5; LvItem.pszText=REG.birthday; bSuccess &=SendMessage(hList,LVM_SETITEM,0,(LPARAM)&LvItem); // Enter text to SubItems return bSuccess; } ///////////////// BOOL InitListViewImageLists(HWND hwndLV,HINSTANCE hinst) { BOOL bSuccess=FALSE; InitCommonControls(); HICON hiconItem; HIMAGELIST himlLarge; himlLarge = ImageList_Create(32, 32, ILC_MASK, 5, 1); for(int i=ICO_ADMIN;i<=ICO_OFFLINE;i++){ hiconItem = LoadIcon(hinst, MAKEINTRESOURCE(i)); if(ImageList_AddIcon(himlLarge, hiconItem)== -1) Error("Addicon nem sikerült!"); DestroyIcon(hiconItem); } if(ListView_SetImageList(hwndLV, himlLarge, LVSIL_NORMAL) != NULL){ bSuccess = TRUE; } else Error("Hiba: %i",GetLastError()); return bSuccess; } ////////////////////////////////////////////////////
-
Nachdem ich dachte ich sei auf dem Gebiet "OH MAN, WAS GEHT SCHON WIEDER SCHIEF?!!!" Experte habe ich den Thread geöffnet, leider umsonst, hier gehts nämlich um ListViews.
Bitte aussagekräftigere Titel verwenden

MfG SideWinder
-
Kann es einfach sein, dass deine Bilder zu groß sind und deshalb der Speicher nicht reicht?
-
Kann nicht sein!
Dimensionen meiner Bilder: 32*32*8
Größe: 2KB
-
Hallo,
ListView_SetImageList liefert NULL auch im Erfolgsfall, wenn vorher keine
ImageList gesetzt war !Returns the HIMAGELIST handle to the previous image list, if any, or NULL otherwise.
Setze mal ein
SetLastError(0);
vor ListView_SetImageList und teste dann nochmal.Gruß
RB
-
Jetzt funktioniert alles , aber trotzdem bekomme ich den error #6 (ERROR_INVALID_HANDLE) bei dieser Linie: Error("Hiba SMALL: %i",GetLastError());
/****************************************************************************** CreateListView ******************************************************************************/ HWND CreateListView(HINSTANCE hInstance, HWND hwndParent) { DWORD dwStyle; HWND hwndListView; HIMAGELIST himlSmall; HIMAGELIST himlLarge; SHFILEINFO sfi; BOOL bSuccess = TRUE; HICON hiconItem,hiconItem2; dwStyle = WS_TABSTOP | WS_CHILD | WS_BORDER | LVS_AUTOARRANGE | LVS_REPORT | LVS_EDITLABELS | LVS_SHAREIMAGELISTS | WS_VISIBLE; hwndListView = CreateWindowEx( WS_EX_CLIENTEDGE, // ex style WC_LISTVIEW, // class name - defined in commctrl.h NULL, // window text dwStyle, // style 0, // x position 0, // y position 0, // width 0, // height hwndParent, // parent (HMENU)IDC_LISTVIEW, // ID g_hInst, // instance NULL); // no extra data if(!hwndListView) return NULL; ResizeListView(hwndListView, hwndParent); //set the large and small icon image lists himlSmall = /*(HIMAGELIST)SHGetFileInfo( TEXT("C:\\"), 0, &sfi, sizeof(SHFILEINFO), SHGFI_SYSICONINDEX | SHGFI_SMALLICON);*/ ImageList_Create(16, 16, ILC_COLOR24 | ILC_MASK, 5, 1); himlLarge = /*(HIMAGELIST)SHGetFileInfo( TEXT("C:\\"), 0, &sfi, sizeof(SHFILEINFO), SHGFI_SYSICONINDEX | SHGFI_LARGEICON);*/ ImageList_Create(32, 32, ILC_COLOR24 | ILC_MASK, 5, 1); for(int i=ICO_ADMIN;i<=ICO_OFFLINE;i++){ hiconItem = LoadIcon(g_hInst, MAKEINTRESOURCE(i)); hiconItem2 = LoadIcon(g_hInst, MAKEINTRESOURCE(i+5)); if(ImageList_AddIcon(himlLarge, hiconItem)== -1 || ImageList_AddIcon(himlSmall, hiconItem2)== -1) MessageBox(0,"Addicon nem sikerült!","gg",0); DestroyIcon(hiconItem); } if (himlSmall && himlLarge) { if(SendMessage(hwndListView, LVM_SETIMAGELIST, (WPARAM)LVSIL_SMALL, (LPARAM)himlSmall)==NULL) Error("Hiba SMALL: %i",GetLastError()); if(SendMessage(hwndListView, LVM_SETIMAGELIST, (WPARAM)LVSIL_NORMAL, (LPARAM)himlLarge)==NULL) Error("Hiba LARGE: %i",GetLastError()); } else { MessageBox(0,"q","q",0); } return hwndListView; }WARUM?
-
Morgen,
ich denke mal daß die LV vorher keine ImageList besitzt also kann auch keine
vorhergesetzte ImageList-Handle zurückgegeben werden, daher ist == NULL falsch !Beim ersten setzen der ImageList ist Rückgabe == NULL kein Fehler.
Oder kommt der Fehler auch, wenn Du die Funktion zweimal nacheinander aufrufts ?
Grüße
RB
-
Ich habe nachgeschaut, unf bin raufgekommen, dass du vollkommend recht hast!
Danke für die Hilfe Kumpel!
