[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