[C con Clase] [winapi] cambiar color a letras de un label

Salvador Pozo salvador en conclase.net
Sab Nov 21 19:41:46 CET 2009


El pasado 2009-11-21 18:28:10, Kalith escribió:
 
K> mucha razón Salvador, soy nuevo en esto del api, se supone que cuando creo
K> el pincel como le paso ese mensaje a mi label o debo directamente
K> aplicarselo al handel padre.

Hola:

El procedimiento recomendado es el que explico en el curso, en este enlace:

http://winapi.conclase.net/curso/index.php?cap=042#CS_COLORES

----8<------
   static HBRUSH pincel;
...
      case WM_CREATE:
        pincel = CreateSolidBrush(RGB(0,255,0));
        ...
      case WM_CTLCOLORSTATIC:
        SetTextColor((HDC)wParam, RGB(0,0,255));
        SetBkColor((HDC)wParam, RGB(0,255,0));
        return (LRESULT)pincel;
      case WM_DESTROY:
        DeleteObject(pincel);
        ...
----8<------

Hay que procesar el mensaje WM_CTLCOLORSTATIC, y hay que hacerlo en el procedimiento de ventana de la ventana propietaria del control, ya sea una ventana o un diálogo.

En lParam recibes el identificador del control. Esto permite mostrar cada control con colores diferentes, si quieres, o si ignoras ese parámetro, usar los mismos colores para todos los controles estáticos.

En wParam recibes un manipulador de DC del control. De modo que sólo hay que asignar un color al texto y al fondo cuando se reciba este mensaje, y MUY IMPORTANTE, hay que retornar un manipulador al pincel (brush) usado para pintar el fondo.

Debido a eso es por lo que en el ejemplo creo un pincel cuando se crea la ventana, (al procesar el mensaje WM_CREATE), y lo destruyo cuando se destruye la ventana, (al procesar el mensaje WM_DESTROY). De ese modo evitamos que se creen varios pinceles. Ten en cuenta que este mensaje puede ser invocado muchas veces durante la vida de la ventana.

El sistema genera un mensaje WM_CTLCOLORSTATIC cada vez que haya que actualizar un control estático.

Hasta pronto.

-- 
Salvador Pozo (Administrador)
mailto:salvador en conclase.net


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