[C con Clase] control listView

Steven Richard Davidson stevenrichard.davidson en gmail.com
Jue Dic 20 13:32:21 CET 2007


Hola Wally,

On Dec 18, 2007 6:13 PM, Wally <aypotua en gmail.com> wrote:
> Hola a Todos!
> En mi proyecto estoy utilizadondo el control LISTBOX pero me di cuenta que queda
> mas profecional remplazarlo por un control listView, ahora bien logre
> con hayuda de Paulo "otro suario de la lista", implementarlo en mi
> poryecto. estoy trabajando en dev-c++ mas presisamente en C. Lo que no
> en cuentro es:
> como ago para eliminar una fila seleccionada, "pienso yo que
> logicamente tengo que saber el indicie antes". Alguien sabe como
> obteber el indice y como borrar esa fila que se refiere el indice?.

En un control "List-View" o vista-listado (o incluso listado con
vistas), realmente no hay filas como tales, sino que son objetos.
Cuando se aplica la vista detallada, entonces se organiza visualmente
cada elemento del listado mostrando un subelemento. Típicamente este
subelemento es texto que sirve de acompañamiento. Cuánta información
es mostrada depende de las columnas que elegiste visualizar. En otras
vistas, esta información no aparece.

Volviendo a la cuestión que planteas, lo que quieres hacer es borrar
un elemento del listado. Esto se hace con la macro
'ListView_DeleteItem()',

BOOL ListView_DeleteItem(
    HWND hControl,
    int iElemento
);

o enviando el mensaje 'LVM_DELETEITEM'.

Ahora bien, en cuanto a cuál elemento borrar, eso depende de cómo
quieres hacer las cosas. Según tu exposición del problema, mencionas
que el elemento está seleccionado. Supongo que te refieres a que el
usuario seleccionó el elemento. Si esto es así, entonces procesa el
mensaje de notificación 'LVN_ITEMACTIVATE' a través del mensaje
'WM_NOTIFY' en la ventana pariente. Por ejemplo,

case WM_NOTIFY:
  if( IDC_LISTADO == (INT)wParam )
  {
#if (_WIN32_IE >= 0x0400)
    LPNMITEMACTIVATE lpnmia = (LPNMITEMACTIVATE)lParam;
#else
    LPNMHDR lpnm = (LPNMHDR)lParam;
#endif
    ...
  }

Para más información, puedes consultar el siguiente enlace:
http://msdn2.microsoft.com/en-us/library/bb774843(VS.85).aspx

Otra forma de obtener el elemento que quieres borrar, es buscándolo.
Esto lo puedes hacer a través del mensaje 'LVM_FINDITEM' o con la
macro 'ListView_FindItem()'. Puedes dirigirte a:
http://msdn2.microsoft.com/en-us/library/bb774903(VS.85).aspx para más
información


Espero que esto te sirva.

Steven




Más información sobre la lista de distribución Cconclase