[C con Clase] Problemas con ListView

Steven R. Davidson vze266ft en verizon.net
Lun Ene 28 20:50:21 CET 2008


Hola Kyosuke,

Kyosuke Kasuga wrote:
> Hi!!!, estoy haciendo un programa en wxDev-C++, y la verdad no se como 
> meterle datos a un control ListView, tampoco sé como sacar datos desde 
> el ( y tampoco como saber que fila esta seleccionada, ni como 
> resetearlo), he intentado de muchas formas pero no me resulta, puede ser 
> k mando su IDC como parametro a un función que se encarga de llenar el 
> listview con los resultados de una consulta MySQL, la consulta la hace 
> bien pero no sé como meter los resultados en el Listview, cualkier ayuda 
> la agradeceria mucho.  De antemano muchas gracias.
>  
> P.D.: Les dejo el codigo de la función k se encarga de ingresar los datos.
>  

[CORTE]

>         Campos = mysql_fetch_row(respuesta);
>         SendDlgItemMessage(hwnd, IDC, LB_ADDSTRING, 0, 
> (LPARAM)Campos[0]);  // Esto no me funciona

Efectivamente, aquí está el problema. Ten presente que las cadenas dadas 
por 'mysql_fetch_row()' no están terminadas en cero; o sea, estas 
cadenas no tienen un carácter nulo para indicar su final. Sin embargo, 
el mensaje 'LB_ADDSTRING' sí espera que el parámetro 'lParam' apunte a 
una cadena terminada en cero. Por lo tanto, tendrás que crear una cadena 
para que acabe en cero. Por ejemplo,

unsigned long *pLongitudes = mysql_fetch_lengths( respuesta );
char *pszCadena = new char[ pLongitudes[0]+1 ];
strncpy( pszCadena, Campos[0], pLongitudes[0] );
pszCadena[ pLongitudes[0] ] = 0;  // Agregamos el carácter nulo

Ahora podemos pasar la cadena, 'pszCadena', a la función 
'SendDlgItemMessage()'.

Por supuesto, cuida la memoria dinámica liberándola cuando ya no la 
necesites.

>      }
>      mysql_free_result(respuesta);
>   }
>   else{
>       delete[] Consulta;
>       mysql_close(MisDatos);
>       return false;
>   }
>   delete[] Consulta;
>   mysql_close(MisDatos);
>   return true;
> }

Por cierto, sugiero usar 'mysql_real_query()', en lugar de 'mysql_query()'.


Espero que esto te sirva.

Steven






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