Home   Artículos   Recursos   Foros   
Artíclos recientes publicados en Latindevelopers:

Visual C++: NSDoubleEdit: Un control para el manejo de números decimales en Visual C++.
Visual C++: Implementando una Calculadora en Visual C++
Visual C++: CCommandLine: Una clase para el uso de la linea de comando
Visual C++: Una clase para el manejo del Registro


CListBox muticolumna ¿CListCtr?

Aqui programadores en la plataforma Win32 con Visual C++ de Microsoft...

Moderador: latindeveloper

CListBox muticolumna ¿CListCtr?

Notapor flipper el Lun Nov 27, 2006 6:22 am

Hola,

Necesito hacer una tabla con dos columnas. Mas o menos lo que necesito es un CListBox multicolumna. La funcionalidad sería muy simple: cada celda tendrá una palabra que se podrá seleccionar con el ratón (nunca editar).

CListBox no se puede usar según he visto porque no te permite manejar mas de una columna.

CListCtrl es otra opción que he estudiado. El problema es que parece un control demasiado complejo para lo que necesito. No necesito manejar imagenes y lo que si necesito es poder especificar el alto de cada fila así como la fuente y el tamaño del texto que se inserta.

¿Debo usar CListCtrl? ¿Hay algún control más sencillo de usar que sirva para lo que necesito? En el caso de CListCtrl:
¿como se especifica el alto de la fila? ¿que se debe hacer para pintar el borde de las celdas? (al probarlo he visto que solo pinta el borde exterior de la tabla y no de cada celda)
¿hay que crear una clase nueva derivada de CListCtrl o se puede usar directamente?
¿Alguna ayuda con código de ejemplo?

Gracias por toda la ayuda, toy un poco desesperado con esto:(

saludos
flipper
Novato
Novato
 
Mensajes: 3
Registrado: Dom Nov 26, 2006 4:21 pm

Re: CListBox muticolumna ¿CListCtr?

Notapor latindeveloper el Vie Dic 01, 2006 4:59 pm

Te recomiendo que utilices CListCtrl, por que es mas versatil. Puedes tambien utilizar un control CListBox pero no tendras las mismas ventajas.

Para crear tu CListCtrl con dos columnas:

Código: Seleccionar todo
// CListCtrl m_report; // Variable relacionada al control

m_report.SetExtendedStyle(m_report.GetExtendedStyle() | LVS_EX_FULLROWSELECT | LVS_EX_INFOTIP );

//Si no quieres que tenga encabezado
//m_report.ModifyStyle(0, LVS_NOCOLUMNHEADER);

int i = 0;
m_report.InsertColumn(i++,"Col1",LVCFMT_LEFT,100);
m_report.InsertColumn(i++,"Col2",LVCFMT_RIGHT,100);


El control debe estar en su modalidad Report.

Para insertar datos en este control:

Código: Seleccionar todo
int pos = 0;
m_report.InsertItem(pos,"Columna1");
m_report.SetItemText(pos,1,"Columna2");


Puedes especificarle una fuente con SetFont, pero antes tienes que crear la fuente. revisa este post:

http://www.latindevelopers.com/forum/viewtopic.159.html


Para pintar el borde de las celdas solo tienes que agregarle la propiedad,

Código: Seleccionar todo
m_report.SetExtendedStyle(m_report.GetExtendedStyle() | LVS_EX_GRIDLINES );


Incluso puedes guardar un puntero o un valor long (recomendado long) en un item por ejemplo.

Código: Seleccionar todo
int pos = 12;
m_report.SetItemData(pos,100);
long valor =m_report.GetItemData(pos); // retornará 100
Imagen
Avatar de Usuario
latindeveloper
Administrador
Administrador
 
Mensajes: 1061
Registrado: Lun Jun 02, 2003 8:29 pm
Ubicación: Peru

Notapor HellMind el Mié Ene 03, 2007 3:29 am

yo estoy intentando usarlo, pero no se donde debo inicializar la columna
ya que si lo hago en el contructor del dialogo se muere

yo cree una clase derivada para agregar todo lo que voy a usar ahi
pero necesito mas info de como usar estos objetos en relacion a mi programa y a los dialogos

por ejemplo yo tengo una clase que guarda los datos que quiero poner en la listctrl pero a esa clase la creo de la clase principal no desde la clase del dialogo

osea que necesito ayuda debo establecer las relaciones entre clases
lei un poco de MVC pero mi proyecto no es tan grande como para complicarlo asi.

Gracias!
HellMind
Novato
Novato
 
Mensajes: 2
Registrado: Mar Ene 02, 2007 11:27 pm

Para HellMind

Notapor latindeveloper el Vie Ene 05, 2007 1:02 pm

HellMind:

El primer bloque de codigo debes inicializarlo en la funcion OnInitDialog, si no existe puedes crearla mediante el ClassWizard a traves del mensaje WM_INITDIALOG.

El segundo segmento puedes utilizarlo para insertar datos a tu control desde cualquier funcion (siempre y cuando se haya inicializado el control)

Nos vemos.
Imagen
Avatar de Usuario
latindeveloper
Administrador
Administrador
 
Mensajes: 1061
Registrado: Lun Jun 02, 2003 8:29 pm
Ubicación: Peru


Volver a Visual C++

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados