Zie m'n volgende post, nu blijft het probleem over dat maar de helft van de selectie wordt verwijderd.
Ben ik weer (vraag nummer 3) over List Views. Nu heb ik een probleem met items verwijderen.
Eerst de code. De functie die (sub)item toevoegt.
De structs. Eentje per rij.
Toevoegen en verwijderen in WM_COMMAND.
En als laatst nog WM_NOTIFY, die de kolommen invult.
Het probleem is dat het deleten van lijstitems de verkeerde items verwijdert. Ook, als bijvoorbeeld een item wordt verwijderd, en er wordt er weer één toegevoegd, dat dan de oude inhoud wordt teruggezet. dat terwijl ik toch echt NIET structs wil hergebruiken (de aan de functie meegegeven index kan alleen maar meer worden).
Edit: Voorbeeld. Hier maken we een paar items aan.

Dan verwijderen we die drie, en maken er 5 aan met een nieuwe naam, 'Pieter'.

Dan zie je dat de oudes weer terugkomen. Terwijl lijstindex in AddItem() gewoon constant met 1 toeneemt.
Edit2: HTML-uitdraai gemaakt van die 64 structs na wat random toevoegen. Hier lijkt alles goed te gaan.

Na het verwijderen van de items blijft de inhoud in de structs. Da's niet zo'n probleem. Die gebruiken we toch niet meer. We tellen gewoon door.
Ben ik weer (vraag nummer 3) over List Views. Nu heb ik een probleem met items verwijderen.
Eerst de code. De functie die (sub)item toevoegt.
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
| void AddItem(int lijstindex) { // Arrays vullen SendMessage(hNaam,WM_GETTEXT,16,(LPARAM)name); SendMessage(hRatio,WM_GETTEXT,16,(LPARAM)CijferRatioChar); SendMessage(hFouten,WM_GETTEXT,16,(LPARAM)AantalFoutChar); float CijferRatio = atof(CijferRatioChar); float AantalFout = atof(AantalFoutChar); float fCijfer = 10 - (AantalFout/CijferRatio); if(fCijfer < 1.0) { fCijfer = 1.0; } else if(fCijfer > 10.0) { fCijfer = 10.0; } sprintf(Cijfer,"%.1f",fCijfer); // Erase de array voor hergebruik for(int a = 0;a < 16;a++) { leerlingen[lijstindex].naam[a] = 0; leerlingen[lijstindex].verhouding[a] = 0; leerlingen[lijstindex].fouten[a] = 0; leerlingen[lijstindex].cijfer[a] = 0; } // Struct opvullen strcat(leerlingen[lijstindex].naam,name); strcat(leerlingen[lijstindex].verhouding,CijferRatioChar); strcat(leerlingen[lijstindex].fouten,AantalFoutChar); strcat(leerlingen[lijstindex].cijfer,Cijfer); // Lijstitem toevoegen LVITEM lvI; lvI.mask = LVIF_TEXT|LVIF_STATE; lvI.iSubItem = 0; lvI.state = 0; lvI.iItem = lijstindex; lvI.pszText = LPSTR_TEXTCALLBACK; // deze gaat naar WM_NOTIFY, LVN_GETDISPINFO SendMessage(hNote,LVM_INSERTITEM,0,(LPARAM)&lvI); } |
De structs. Eentje per rij.
C++:
1
2
3
4
5
6
| struct { char naam[16]; char verhouding[16]; char fouten[16]; char cijfer[16]; } leerlingen[64]; |
Toevoegen en verwijderen in WM_COMMAND.
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| case IDC_PUT: { AddItem(nextitem); nextitem++; break; } case IDC_DEL: { int count = SendMessage(hNote,LVM_GETITEMCOUNT,0,0); for(int a = 0;a < count;a++) { if(SendMessage(hNote,LVM_GETITEMSTATE,a,LVIS_SELECTED) == LVIS_SELECTED) { SendMessage(hNote,LVM_DELETEITEM,a,0); } } break; } |
En als laatst nog WM_NOTIFY, die de kolommen invult.
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
| case WM_NOTIFY: { switch (((LPNMHDR) lParam)->code) { case LVN_GETDISPINFO: { NMLVDISPINFO* plvdi; plvdi = (NMLVDISPINFO*) lParam; switch (plvdi->item.iSubItem) { case 0: { plvdi->item.pszText = leerlingen[plvdi->item.iItem].naam; break; } case 1: { plvdi->item.pszText = leerlingen[plvdi->item.iItem].verhouding; break; } case 2: { plvdi->item.pszText = leerlingen[plvdi->item.iItem].fouten; break; } case 3: { plvdi->item.pszText = leerlingen[plvdi->item.iItem].cijfer; break; } default: break; } break; } case LVN_ENDLABELEDIT: return true; default: return DefWindowProc(hwnd, Message, wParam, lParam); } break; } |
Het probleem is dat het deleten van lijstitems de verkeerde items verwijdert. Ook, als bijvoorbeeld een item wordt verwijderd, en er wordt er weer één toegevoegd, dat dan de oude inhoud wordt teruggezet. dat terwijl ik toch echt NIET structs wil hergebruiken (de aan de functie meegegeven index kan alleen maar meer worden).
Edit: Voorbeeld. Hier maken we een paar items aan.

Dan verwijderen we die drie, en maken er 5 aan met een nieuwe naam, 'Pieter'.

Dan zie je dat de oudes weer terugkomen. Terwijl lijstindex in AddItem() gewoon constant met 1 toeneemt.
Edit2: HTML-uitdraai gemaakt van die 64 structs na wat random toevoegen. Hier lijkt alles goed te gaan.

Na het verwijderen van de items blijft de inhoud in de structs. Da's niet zo'n probleem. Die gebruiken we toch niet meer. We tellen gewoon door.
[ Voor 20% gewijzigd door Orwell op 15-06-2010 09:06 ]