Mam pytanko do fachowców z "Visual C++" (a zapewne są tutaj tacy!) odnośnie sortowania danych w kontrolce CListCtrl... Otóż po wcisnięciu nazwy dowolnej kolumny ma wywołać się funkcja sortująca wpisy na liście...
void CMyView::OnColumnclick(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
CListCtrl& ListCtrl = GetListCtrl();
ListCtrl.SortItems(CompareFunc,(LPARAM)&ListCtrl);
*pResult = 0;
}
Napisałem sobie funkcję porównującą, ale ta nie chce działać.
int CALLBACK CompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort) {
[...]
}
Nie zagłębiając się w samą realizację tej funkcji, odkryłem, że problem tkwi w tym, że za każdym wywołaniem funkcji "CompareFunc" program podaje jej jako dane wejściowe:
lParam1 = 0
lParam2 = 0
Dlaczego tak się dzieje i jak sobie z tym poradzić? Zaznaczę od razu, że gdy dodaję każdy nowy element do listy widoku "ListCtrl", to wykonuję to w taki sposób, aby lParam = iItem, mianowicie:
LVITEM lvi;
lvi.iItem = ktory;
lvi.lParam = ktory;
[...]
ListCtrl.InsertItem( &lvi );
Będę dozgonnie wdzięczny za wszelką pomoc w rozwiązaniu tego, nie dającego mi spokojnie zasnąć, problemu... Z góry wielkie dzięki!!!
Ps. Przekopałem już Google, nigdzie nikt nie wspomina, skąd bierze się błędne przekazywanie danych wejściowych dla funkcji porównującej. :(