Witam,

Mam problem z sortowaniem danych w kontrolce ListView w winapi.

Moja funkcja sortujaca;

int CALLBACK CompareFuncListVieww(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
    TCHAR buf1[16];
    TCHAR buf2[16];
    wmemset(buf1,0, 16);
    wmemset(buf2,0, 16);

    int aa = (int)lParam1;
    int bb = (int)lParam2;

    ListView_GetItemText(g_hListView,aa,1,buf1, 16);
    ListView_GetItemText(g_hListView,bb,1,buf2, 16);

    float a = _wtof(buf1);
    float b = _wtof(buf2);

    if (a > b) return -1;
    if (a < b) return 1;
    return 0;
}

a wywołuje ją po kliknięciu w przycisk

SendMessage(g_hListView, WM_SETREDRAW, FALSE, 0);
ListView_SortItems(g_hListView,CompareFuncListVieww,(LPARAM) 0);
SendMessage(g_hListView, WM_SETREDRAW, TRUE, 0);

I właściwie to zmienne param przyjmują wartości 3,4 potem dalej 3,5 - wydaje się ze powinny zaczynać od zera. O co tu właściwie chodzi.

Tworzenie ListView robię tak;

    g_hListView = CreateWindow(WC_LISTVIEW,
                                _T(""),
                                WS_VISIBLE | WS_CHILD | LVS_REPORT,// | LVS_SORTDESCENDING ,
                                370,
                                505,
                                610,
                                190,
                                hWnd,
                                0,
                                _hinstance,0);
    LVCOLUMN c;
    c.mask = LVCF_TEXT | LVCF_WIDTH; // flagi

    c.pszText = _T("User"); // nagłówek
    c.cx = 150; // szerokość kolumny w pikselach
    ListView_InsertColumn(g_hListView,0,&c); // dodajemy kolumnę

    c.pszText = _T("Cena"); // nagłówek
    c.cx = 80;
    ListView_InsertColumn(g_hListView,1,&c); // dodajemy kolumnę

a dane dodaję na czas testów na sztywno

DodajPozycje(g_hListView,_T("nick"), _T("127.55"))
static int par = 0, i = 0;

LVITEM p;
ZeroMemory(&p,sizeof(p)); // czyścimy zmienną
p.mask=LVIF_TEXT | LVIF_PARAM; // tekst i informacje potrzebne do sortowania
p.lParam=(LPARAM)par;       
p.iSubItem=0;
p.iItem=i; // numer pola
p.pszText = User; // tekst pola
ListView_InsertItem(h,&p);

p.mask = LVIF_TEXT; // tekst
p.iItem = i;
p.iSubItem = 1; // numer subitema
p.pszText = Cena;
ListView_SetItem(h,&p); // ustawiamy pole z jednym subitemem
    i++, par++;

No i powinien sortować po cenie ale nie sortuje