Heb een probleempje met het ophalen en opslaan van List View 'Item.subItem', de waardes in de kolommen dus. Ik gebruik hiervoor dit...
Dus 64 blokken van drie char arrays. Elke struct stelt zoals te zien een leerling voor met zijn cijfer enzo. Dit komt dus neer op 64*(32+32+32) bytes aan opslag. Elke keer als er een item aan de lijst wordt toegevoegd, wordt de index meegegeven, en worden de waardes leerlingen[index] ingevuld. Die waardes worden dan opgehaald door WM_NOTIFY...
Die bij het afhandelen van LVN_GETDISPINFO alle items langsgaat. Als item #1 wordt ingevuld, (dus a staat op 0, wordt nummertje 0 van alle leerlingen-objecten aangesproken en uitgelezen. Dit werkt tot nu toe perfect.
Maar als ik ga scrollen door de items van de listview, loopt alles in de soep. Items krijgen (zo lijkt het) random
subitems toegewezen. Er is één patroon te zien af en toe: alle items krijgen de nieuwste subitems te pakken, maar willen niet meer terug. Heb al op vele plekken met MessageBox geprobeerd waardes te tracken (zie code voor een voorbeeld), maar alles lijkt goed te gaan.
Voorbeeld:

Items toevoegen, niet op listview zelf klikken.

Sinterklaas' balkje aanklikken, en met toetsenbord/muis naar boven scrollen.
Iemand een idee wat ifk fout doe? Zijn er nog andere stukjes code nodig voor helderheid?
Edit: antwoord gevonden in msdn. Deze kan dicht.
C++:
1
2
3
4
5
| struct { char verhouding[32]; char fouten[32]; char cijfer[32]; } leerlingen[64]; |
Dus 64 blokken van drie char arrays. Elke struct stelt zoals te zien een leerling voor met zijn cijfer enzo. Dit komt dus neer op 64*(32+32+32) bytes aan opslag. Elke keer als er een item aan de lijst wordt toegevoegd, wordt de index meegegeven, en worden de waardes leerlingen[index] ingevuld. Die waardes worden dan opgehaald door WM_NOTIFY...
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
| case LVN_GETDISPINFO: { NMLVDISPINFO* plvdi; plvdi = (NMLVDISPINFO*) lParam; int count = SendMessage(hNote,LVM_GETITEMCOUNT,0,0); for(int a = 0;a < count;a++) { // Controle char buffertje[32]; itoa(a,buffertje,10); MessageBox(hwnd,buffertje,"Index #",MB_OK); switch (plvdi->item.iSubItem) { case 1: { plvdi->item.pszText = leerlingen[a].verhouding; break; } case 2: { plvdi->item.pszText = leerlingen[a].fouten; break; } case 3: { plvdi->item.pszText = leerlingen[a].cijfer; break; } } } break; } |
Die bij het afhandelen van LVN_GETDISPINFO alle items langsgaat. Als item #1 wordt ingevuld, (dus a staat op 0, wordt nummertje 0 van alle leerlingen-objecten aangesproken en uitgelezen. Dit werkt tot nu toe perfect.
Maar als ik ga scrollen door de items van de listview, loopt alles in de soep. Items krijgen (zo lijkt het) random
subitems toegewezen. Er is één patroon te zien af en toe: alle items krijgen de nieuwste subitems te pakken, maar willen niet meer terug. Heb al op vele plekken met MessageBox geprobeerd waardes te tracken (zie code voor een voorbeeld), maar alles lijkt goed te gaan.
Voorbeeld:

Items toevoegen, niet op listview zelf klikken.

Sinterklaas' balkje aanklikken, en met toetsenbord/muis naar boven scrollen.
Iemand een idee wat ifk fout doe? Zijn er nog andere stukjes code nodig voor helderheid?
Edit: antwoord gevonden in msdn. Deze kan dicht.