2011-03-12 15 views
7

Esto es fácil en .NET (no es mi pregunta), pero estoy tratando de averiguar si es posible simplemente cambiar el texto de una cadena en un control Win32 list box dado un índice.¿Hay un mensaje SetText para el control Win32 ListBox?

Hay una función GetText que toma un índice de elemento pero nada para cambiar el texto de un elemento/cadena existente. Mi solución será eliminarlo y volverlo a agregar en el recuadro (que también es una perspectiva extraña ya que no hay un solo comando para agregar una cadena + datos de elementos; estos deben hacerse cuidadosamente insertando la cadena y luego configurando el elemento). datos en el índice de la cadena insertada, que es complicado (¿no es posible?) con la clasificación activa).

Respuesta

5

Sí, la falta de un mensaje LB_SETITEMTEXT es un poco extraña.

Usted debe poner su Supr + Insert + SetData llamadas entre llamadas a WM_SETREDRAW ...

+1

Sí, esta es la solución correcta. Los controles de WinForms hacen exactamente lo mismo bajo el capó. No hay una solución más elegante que te pierdas. –

+1

@Cody: Eso es desalentador, pero no sorprendente. Win32: convirtiendo tareas de programación de 30 segundos en escapadas de 30 minutos, desde 1993. Incluso si tiene la referencia Petzold de 1500 páginas en su escritorio. –

+0

@Jared: Sí, es poco probable que una API creada a mediados de los 80 siga siendo considerada como "de vanguardia" hoy en día. Eso sí, ciertamente * fue entonces: la programación de Windows en 1988 fue verdaderamente revolucionaria (bueno, estaba la Mac ...). Lo que GDI solo logró hacer es bastante admirable. Es fácil criticar. El control 'ListView' es * mucho * más nuevo que' ListBox'. No es sorprendente que también ofrezca más funciones. Como otros han sugerido, si desea esas características, elija un control diferente. Pero si le toma 30 minutos eliminar un elemento e insertar uno nuevo, considere una nueva carrera. –

1

A riesgo de ser fuera de tema ...

que tienden a utilizar el control ListView todo el tiempo . Lo querrá en la vista de informe para imitar un cuadro de lista y, como una ventaja, admite múltiples columnas.

Ah .. y tiene un mensaje LVM_SETITEM :)
http://msdn.microsoft.com/en-us/library/bb761186(v=VS.85).aspx

+0

El problema con el uso de una vista de lista en modo de informe como este es que debe ajustar el ancho de columna en función del ancho de los elementos si oculta el encabezado de columna ... – Anders

Cuestiones relacionadas