[C con Clase] Ordenar ListView
Steven Davidson
srd4121 en njit.edu
Jue Mayo 8 09:01:19 CEST 2008
Hola Carlos,
Carlos Oyarzo wrote:
> Aquí va el proyecto Steven.
>
> No sé cual será el problema....cuando lo ejecuto, desaparecen algunos
> valores de la segunda columna y ni se ordena :-S,
> pero cuando quito el estilo LVS_SORTASCENDING, no hay problemas.....
>
He estado haciendo algunas comprobaciones y no he logrado solucionar el
problema usando 'LVS_SORTASCENDING'. Sin embargo, sí lo he conseguido
con la macro 'ListView_SortItems()', la cual invoca una función definida
por la aplicación. Por ejemplo,
int CALLBACK func( LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort )
{
TCHAR lpsz1[100], lpsz2[100];
ListView_GetItemText( (HWND)lParamSort, lParam1, 0, lpsz1, 100 );
ListView_GetItemText( (HWND)lParamSort, lParam2, 0, lpsz2, 100 );
return lstrcmp( lpsz1, lpsz2 );
}
void InitListview(HWND hwnd)
{
LoadLVNombre( hwnd, 0, TEXT("Chocolate") );
LoadLVPrecio( hwnd, 0, TEXT("$ 500") );
...
ListView_SortItems( hLV, func, (LPARAM)hLV );
}
void LoadLVNombre( HWND hwnd, const int row, const TCHAR *szNombre )
{
LVITEM lvItem;
lvItem.mask = LVIF_TEXT | LVIF_PARAM;
lvItem.lParam = row;
...
}
Como puedes ver, he usado el miembro 'lParam' para ayudarme en la
ordenación, que es justo lo que emplea la macro 'ListView_SortItems()'.
Obviamente, no puedes usar el estilo 'LVS_SORTASCENDING' si usas este
otro método.
Espero que esto te sirva.
Steven
Más información sobre la lista de distribución Cconclase