La Web del Programador: Comunidad de Programadores
 
    Pregunta:  13547 - ASIGNAR UN CBYTEARRAY A UN CSTATIC Y VICEVERSA
Autor:  José Luis De Cáceres García
Por favor, necesito saber cómo se puede realizar la asignación de un objeto CByteArray a un CStatic y viceversa. Mi problema surge al querer manejar unos campos de imágenes de una bd y querer mostrar dichos campos a través de miembros static de cuadros de diálogo.
Estoy manejando VC++; he realizado la bd con estilo DAO (he probado tanto estático (DFX) como dinámico (funciones Get/SetFieldValue); el campo imagen de la bd es de tipo CByteArray; y el campo del cuadro de diálogo a través del cual mostrar esa imagen de la bd es de tipo CStatic.
Si hay alguna otra forma de poder manejar (tanto insertar, como mostrar y eliminar) los campos imágenes de la bd a través de cuadros de diálogo, por favor, coméntenmela.
Gracias por todo.

  Respuesta:  Doctor Luz
Hombre, al CStatic le puedes asociar un CBitmap con la funcion SetBitmap. El CBitmap asociado debe de vivir mientras viva el CStatic, es decir, no vale cualquier objeto local.

Para crear el CBitmap depende de que sea el CByteArray, depende de si es jpg, gif, bmp..., si contiene información sobre la paleta de colores, dimensiones etc.

si es un bmp puedes usar el CByteArray para crear un HBITMAP con CreateDIBSection and SetDIBits. Luego puedes usar CBitmap::Attach() para asociar el HBITMAP al CBitmap, y asi asociarlo al CStatic.

Si el CByteArray fuera todo un archivo de imagen puedes usar IPicture para mostrarlo en un DC directamente.

Como ves hay muchas posibilidades, quizá mostrarlo en un CStatic no sea la mejor ya que puedes mostrarlo directamente en un DC y el efecto será prácticamente el mismo, si lo haces en la funcion respuesta a WM_PAINT.