ListView Problem



  • Hallo liebe Freunde,

    habe jetzt schon länger hier im Forum gelesen, leider aber kein ähnliches Problem wie das meines gefunden, deshalb mal ein neuer Thread 🙂 Ich programmiere für ein Hochschulprojekt ein Grid, das direkt von einer SQL-Datenbank ein paar Daten abholen soll, was soweit auch funktioniert. Ist der erste Versuch mit der WinAPI, deshalb bin ich noch etwas ratlos, wo der folgende Fehler herkommt.

    Erstmal meine WndProc Funktion zum erstellen des Grids:

    1. Mein Struct, welches ich im Grid darstellen möchte:
    typedef struct
    {
       char  stID[8];
       char  stCustomerID[8];
       char  stCustomer[45];
       char  stTotalItems[20];
       char  stTotalOrders[20];
       char  stNote[100];
    
    }Item;
    
    1. Meine Funktion zum Grid erstellen:
    LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) 
    {
    	static   CREATESTRUCT   *cs;
    	static   HWND           hWndListView;
    	static   HFONT          hFont;
    	static   LV_ITEM        lv;
    	static   Item           ListItem[20];
    	static   char           szColumnHeader[6][14] = {"orderID", "customerID", "Customer", "Total Orders", "Total Items", "Notes"};
    	int                     index;
    	int                     iiWidth[6];
    	HDC						hdc ;
        PAINTSTRUCT				ps ;
        RECT					rect ;
    
    	LV_COLUMN               lvC;
    
    	LV_DISPINFO             *lvd;
    	NMHDR                   *hdr;
    
    	switch(iMsg) 
    	{
    		case WM_CREATE:
    
    			/* Create List */
    			cs = (CREATESTRUCT *)lParam;
    			hFont = CreateFont(11, 0, 0, 0, 500, FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_CHARACTER_PRECIS, PROOF_QUALITY, FF_DONTCARE, "MS SANS SERIF");
    			hWndListView = CreateWindowEx(WS_EX_CLIENTEDGE, WC_LISTVIEW, "", WS_TABSTOP | WS_CHILD | WS_BORDER | WS_VISIBLE | LVS_REPORT | LVS_SINGLESEL, 0, 0, 0, 0, hwnd,(HMENU)ID_LISTVIEW, cs->hInstance, NULL);
    
    			ListView_SetExtendedListViewStyle(hWndListView, LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
    
    			/*Size of the Grid*/
    			iiWidth[0] = 50;
    			iiWidth[1] = 100;
    			iiWidth[2] = 200;
    			iiWidth[3] = 100;
    			iiWidth[4] = 100;
    			iiWidth[5] = 300;
    
    			lvC.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
    			lvC.fmt = LVCFMT_LEFT;
    
    			for(index = 0; index < 18; index++)
    			{
    				lvC.iSubItem = index;
    				lvC.cx = iiWidth[index];
    				lvC.pszText = szColumnHeader[index];
    				ListView_InsertColumn(hWndListView,index,&lvC);
    			}
    
    				AdjustListView(hWndListView, &lv, index);
    
    			pListItem = &ListItem[0];	
    
                            /*Fetching mySQL Data!*/
    			sqlConnectDatabase();
    			fill_table(&ListItem[0]);
    
    		break;
    
    		case WM_SIZE:
    			GetClientRect(hwnd, &rect);
    			MoveWindow(hWndListView, 3, 3, rect.right - 6, rect.bottom - 6, 1);
    		break;
    
    		case WM_NOTIFY:
    			switch(((LPNMHDR)lParam)->code)
    			{
    			case LVN_GETDISPINFO:
    				lvd = (LV_DISPINFO FAR*)lParam;
    				if((((LPNMHDR)lParam)->hwndFrom == hWndListView))
    				{
    					switch(lvd->item.iSubItem)
    					{
    					case 0:
    						lvd->item.pszText =  ListItem[lvd->item.iItem].stID;
    					break;
    					case 1:
    						lvd->item.pszText = ListItem[lvd->item.iItem].stCustomerID;
    					break;
    					case 2:
    						lvd->item.pszText = ListItem[lvd->item.iItem].stCustomer;
    					break;
    					case 3:
    						lvd->item.pszText = ListItem[lvd->item.iItem].stTotalOrders;;
    					break;
    					case 4:
    						lvd->item.pszText = ListItem[lvd->item.iItem].stTotalItems;
    					break;
    					case 5:
    						lvd->item.pszText = ListItem[lvd->item.iItem].stNote;
    					break;
    					}
    				break;
    				}
    			}
    		break;
    		case WM_CLOSE:
    			DestroyWindow(hwnd);
    		break;
    		case WM_DESTROY:
    			DeleteObject(hFont);
    			PostQuitMessage(0);
    		break;
    	}
    	return DefWindowProc(hwnd, iMsg, wParam, lParam);
    }
    

    Folgendes Problem tritt auf: Wenn ich nun mehrere Zeilen machen möchte, erhöhe ich einfach in der Zeile

    static   Item           ListItem[20];
    

    die Anzahl der Elemente und dazu passend natürlich ein wenig darunter die for-Schleife.
    Bis zu einer größe von 18 funktioniert das auch, Daten werden korrekt eingefügt und angezeigt. Sobald ich aber die Arraygröße vom ListItem auf 20 oder noch höher stelle, erscheinen einfach garkeine Daten mehr in meiner Tabelle, die Tabelle bleibt einfach leer (wird aber korrekt erstellt!).

    Da ich mich ja als Anfänger outen muss, weiss ich leider nicht so recht, woran das liegen könnte....
    vll. hat einer eine Idee oder Hinweis? gerne auch per ICQ

    EDIT: Fehler gefunden, war natürlich ein billiger Fehler in der For-Schleifen, den man da schon mal schnell übersieht -_-....danke trotzdem! hat sich erledigt, kann zu gemacht werden :)!

    Grüße Ralf


Log in to reply