[C con Clase] TextOut o SetDlgItemText?

Steven Davidson steven en conclase.net
Sab Feb 3 19:37:13 CET 2007


Hola Francesc,

El pasado 2007-02-03 12:43:05, Francesc Cabecerans escribió:

FC> Hola estoy escribiendo un juego de preguntas y respuestas en Windows32, y me encuentro ante una duda, para poner las preguntas puedo utilizar una etiqueta, Label i modificar su contenido dinmámicamente con SetDlgItemText, pero sin color, pensaba utilitar TextOut, i así poder darle un poco de vida al texto. Pero por mas que mando mensajes WM_PAINT, para que el procedimiento "pinte" las preguntas no me hace ningún caso. Si pretendo que pinte las preguntas cada vez que se clicquea un botón de respuesta tampoco hace nada...
FC> Acaso TextOut sólo funciona "en modo estático" o sea al lanzar el procedimiento y nada más? 


Primeramente, nunca envíes el mensaje WM_PAINT directamente. Este mensaje es algo especial bajo MS-Windows. En su lugar, usa 'InvalidateRect()'. Su prototipo es:

BOOL InvalidateRect(
  HWND hWnd,          // manipular a la ventana
  CONST RECT* lpRect, // coordenadas del rectángulo, NULL: todo el área
  BOOL bBorrar        // TRUE: borrar el fondo antes de pintar, FALSE: no borrar
);

Por ejemplo,

HWND hPregunta;
...
InvalidateRect( hPregunta, NULL, TRUE );

En cuanto a poner color, realmente no tienes que usar 'TextOut()' ya que seguramente el control la invoca internamente. Ahora bien, depende de lo que estés usando. Si al decir "etiqueta" estás hablando de un control estático, entonces puedes procesar el mensaje WM_CTLCOLORSTATIC, en la ventana pariente, para controlar los colores. Por ejemplo,

COLORREF crTextoPregunta;
COLORREF crTextoFondoPregunta;
HBRUSH hbrFondoPregunta;
...
case WM_CTLCOLORSTATIC:
{
  HDC hdc = (HDC) wParam;
  HWND hControl = (HWND) lParam;

  SetTextColor( hdc, crTextoPregunta );
  SetBkColor(  hdc, crTextoFondoPregunta );
}
return (LRESULT) hbrFondoPregunta;


Espero que esto te ayude.

Steven


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