[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