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! 🤡


Anmelden zum Antworten