[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