[C con Clase] problema con control LISTVIEW

tttony jdeleca en yahoo.es
Jue Sep 18 22:09:55 CEST 2008


Hola, este es mi primer mensaje aqui y si no le importa al autor aprovechare este tema para presentar mi problema ya que tiene que ver con el control listview, ademas de que he estado siguiendo el tutorial de C++ en esta pagina ya que soy un novato con C++ aunque tambien programo en VB6.0 y PHP entre otros.

Tengo un programa hecho en VB6.0 y quiero llevarlo a C++.

Estaba buscando en la web un ejemplo de un listview y cuando entre a este tema me baje el ejemplo que tienen aqui en el primer post y es exactamente lo que buscaba asi que lo probe, pero claro siguiendo los passos para vincular el archivo: comctl32.lib, aunque el Visual C++ 2008 EE esta en espaņol tuve que hacerlo de esta manera:

En la solucion del proyecto selecionas el proyecto y click derecho --> propiedades --> (en la izquierda) propiedades de configuracion --> vinculador --> entrada --> (en la derecha) dependencias adicionales --> busque el archivo: comctl32.lib que esta en C:\Archivos de programa\Microsoft SDKs\Windows\v6.0A\Lib

Le di a depurar y funciono a la perfeccion, bueno todo bien hasta ahi pero el problema es que en mi proyecto no funciona incluso con todos los pasos listos para que funcione, este es el codigo:

// controls.h -----------------------------------------------------------------

LV_COLUMN            lvCol;          // --> Para crear columnas
wchar_t              szbuffer[260];  // --> Para almacenar la cadena
LV_ITEM              lvItem;         // --> Para crear items


// --> Constantes de estilo visual del listview
// --> Experimente con estos valores para que obtenga lo que necesite
const int LV_NORMAL    = WS_CHILD|WS_VISIBLE|WS_BORDER|LVS_SHOWSELALWAYS|LVS_SINGLESEL;
const int LV_ICONO     = LV_NORMAL|LVS_ICON;
const int LV_ICONOSM   = LV_NORMAL|LVS_SMALLICON;
const int LV_LISTA     = LV_NORMAL|LVS_LIST;
const int LV_REPORTE   = LV_NORMAL|LVS_REPORT;


// usar variables LPWSTR en vex de LPSTR ya que al compilar me lanza un error
// de que no puede convertir de LPSTR a LPWSTR


// --> Agrega una columna al listview
void AgregarColumna(LPWSTR lpszTexto, int nAncho, int nIndice){
	lvCol.cchTextMax = 260;
	lvCol.pszText = lpszTexto;
	lvCol.mask = LVCF_TEXT|LVCF_WIDTH;
	lvCol.cx = nAncho;
	ListView_InsertColumn(hWndListview, nIndice, &lvCol);
}

// --> Muestra las grillas en el listview
void UsarGrillas(void){
	SendMessage(hWndListview, LVM_SETEXTENDEDLISTVIEWSTYLE,0,(LPARAM)LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT);
}

// --> Agrega un item al listview
void AgregarItem(LPWSTR lpszTexto, int nIndice, int nIndiceImagen){

	lstrcpy(szbuffer, lpszTexto);  
	lstrcat(szbuffer, _T("\0"));
	lvItem.pszText = szbuffer;
	lvItem.cchTextMax = sizeof(szbuffer);
	lvItem.mask = LVIF_TEXT | LVIF_IMAGE; 
	lvItem.iItem = nIndice; 
	lvItem.iImage = nIndiceImagen;
	ListView_InsertItem(hWndListview, &lvItem);
	ListView_Update(hWndListview, nIndice);

}

// --> Agrega un subitem al listview
void AgregarSubItem(int nIndiceItem, int nIndiceSubItem, LPWSTR lpszTexto){
	lstrcpy(szbuffer, lpszTexto);  
	lstrcat(szbuffer, _T("\0"));
	LV_ITEM lv;
	lv.iSubItem = nIndiceSubItem;
	lv.pszText = szbuffer;
	SendMessage(hWndListview, LVM_SETITEMTEXT, (WPARAM) (int) nIndiceItem, (LPARAM) (LV_ITEM FAR *) &lv);

}


// esta funcion la ejecuto en el mensaje WM_CREATE


HWND CreateListView(HWND hWnd,
				  int left, int top,
				  int width, int height)
{

	 // --> Inicia los controles comunes
	InitCommonControls();

	HWND hWndListview = CreateWindowEx(WS_EX_CLIENTEDGE, WC_LISTVIEW, _T(""), 
								LV_REPORTE, 
								left, 
								top,
								width,
								height,
								hWnd, 
								NULL, 
								hInst,
								NULL);
	// --> Usamos las grillas
	UsarGrillas();

	AgregarColumna(_T("Tipo"), 150, 0);
	AgregarColumna(_T("Mensaje"), 200, 1);
	
	// --> Agrega los items
   AgregarItem(_T("232423343"), 0, 0);
   AgregarSubItem(0, 1, _T("PEPETO"));
   AgregarItem(_T("1487454"), 1, 0);
   AgregarSubItem(1, 1, _T("MARIA"));

	if(hWndListview == NULL)
				MessageBox(hWnd, _T("Could not create list view control."), _T("Error"), MB_OK | MB_ICONERROR);
	return hWndListview;
}

// controls.h -----------------------------------------------------------------


He estado indagando y creo que es un problema que tiene que ver con codificacion del proyecto ya que por defecto en las propiedades del VC++ 2008 EE dice: "Utilizar juegos de carateres UNICODE" aqui le dejo un screen del listview:

http://s2.subirimagenes.com/otros/1125283listview.jpg

En el proyecto que me baje de ejemplo se ejecuta sin problemas pero viendo la codificacion del proyecto dice: "Utilizar juegos de carateres MULTIBYTE" es por eso que creo que es un problemas que tiene que ver con codificacion.

Tuve que cambiar como ven, algunas variables para que sea compatible con UNICODE.

Bueno espero haber explicado bien mi problema y tambien espero sus respuestas..

saludos...
en la programacion la teoria al final no es ni lo que era


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