[C con Clase] Problema con Listview

Steven R. Davidson vze266ft en verizon.net
Mar Feb 5 20:14:13 CET 2008


Hola Kyosuke,

Kyosuke Kasuga wrote:
> Hi!!!, ¿K tal?, bueno tengo un gran problema con mi programa (k estoy 
> haciendo con wxDev-C++), tengo un control Listview y no se como 
> agregarle items, he intentado de muchas formas pero nada me resulta, 
> intente tratarlo como un Listbox pero no funcionó, luego revisando la 
> pagina de Microsoft intente otra forma pero tampoco me funciona, yo solo 
> kiero que me agrege una lista de 2 columnas al control Listview, les 
> dejo el codigo a ver si alguien sabe k estoy haciendo mal, de antemano 
> muchas gracias:
>  

Veamos el código fuente.

> bool BuscarList(HWND hwnd, char *maquina, char *usuario, char *clave, 
> char *dato, char *Plantilla, int IDC)
> {

[CORTE]

>   /* Se formula consulta para leer datos*/
>   ancho = strlen(Plantilla) + strlen(dato);
>   Consulta = new char[ancho];
>   sprintf(Consulta, Plantilla, dato);
>   mysql_query(MisDatos, Consulta);
>   if ((respuesta = mysql_store_result(MisDatos))){
>      total = (int) mysql_num_rows(respuesta);
>      columnas = (int) mysql_num_fields(respuesta);
>      for (i=0;i<total; ++i){
>         // Agregar datos al Listview
>         Campos = mysql_fetch_row(respuesta);
>         strcpy(muestra[0],Campos[0]); muestra[0][50]= 0;
>         strcpy(muestra[1],Campos[1]); muestra[1][50]= 0;
>         Item.iItem = i;
>         Item.iImage = i;
>         Item.iSubItem = 0;
>         Item.lParam = (LPARAM) &muestra;
>         Item.pszText = LPSTR_TEXTCALLBACK;

Esto significa que el control enviará el mensaje de notificación 
'LVN_GETDISPINFO' a la ventana padre (o cuadro de diálogo) para agregar 
el texto para los subapartados (subítems). Esto implica que la ventana 
pariente contiene la información a agregar a cada subapartado. Sin 
embargo, esto no es el caso.

Sugiero copiar la cadena a través de la macro 'ListView_SetItemText()'.

>         ListView_InsertItem(hwnd, &Item);

Esto no es correcto. El manipulador 'hwnd' hace alusión al cuadro de 
diálogo o ventana principal. Sin embargo, la macro 
'ListView_InsertItem()' requiere el manipulador del control "list-view". 
Deberías usar 'GetDlgItem()' para obtener el manipulador del control a 
partir del número de identificación. Esto es,

ListView_InsertItem( GetDlgItem(IDC), &item );

>         //SendMessage(hwnd, LVM_INSERTITEM, 0, (LPARAM)&Item);

Aquí tienes el mismo problema. En tal caso, deberías usar 
'SendDlgItemMessage()', resultando en la siguiente invocación:

SendDlgItemMessage( hwnd, IDC, LVM_INSERTITEM, 0, (LPARAM)&Item );

>         sprintf(Mensaje, "Dato : %s", Campos[1]);
>         MessageBox (hwnd, Mensaje, "Chanchichó", MB_ICONEXCLAMATION);
>      }


Espero que esto te sirva.

Steven






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