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