2010-04-29 16 views
7

Tengo un componente que he creado que incorpora un procesador acelerado por hardware en un TWinControl para que pueda colocarlo en un formulario. Funciona bastante bien en la mayoría de los casos, pero si trato de cambiar el tamaño del control, todo queda en blanco hasta que se ejecute el ciclo de mensajes y llame al WndProc para el procesador, que está alojado en una DLL externa. Esto significa que tengo que llamar a Application.ProcessMessages explícitamente después de cambiar el tamaño del control en el código, que sé que se considera una mala práctica.Evitando la necesidad de llamar a ProcessMessages

¿Hay alguna manera de poner algo de lógica en el control para invocar el WndProc en la DLL cuando cambio el tamaño del control, así que no necesitaré llamar a ProcessMessages para que las cosas se procesen correctamente?

+0

+1 por querer evitar los mensajes de proceso en primer lugar. –

Respuesta

10

En su lugar, podría llamar al TWinControl.Update, que debería enviar un evento WM_PAINT a SendMessage, por lo que no está manejando mensajes arbitrarios.

+0

Eso funcionó. ¡Gracias! –

3

La solución correcta es llamar a InvalidateRect cuando cambia el tamaño. Windows luego te enviará un mensaje WM_PAINT. Como referencia, debe sacar a Petzold de la estantería y leer su capítulo sobre pintura.

+1

Además, si la configuración del sistema no es redibujar las ventanas mientras se cambia el tamaño, entonces no obtendrá WM_PAINT hasta que se complete la operación de cambio de tamaño. –

Cuestiones relacionadas