2012-02-27 16 views
6

? Nunca he entendido por qué borrar el fondo tiene un mensaje de Windows separado. Me parece un poco redundante. Cuando he creado botones dibujados por el propietario, siempre he terminado borrando el fondo desde WM_PAINT. A veces incluso hice toda la pintura desde WM_ERASEBKGND y dejé WM_PAINT vacía. Ambos parecen funcionar bien. ¿Hay alguna ventaja al separar la pintura en 2 operaciones?¿Por qué hay un mensaje separado para WM_ERASEBKGND

+4

Como se explica a continuación, esto es un remanente de los viejos tiempos. Para una aplicación moderna, siempre debe devolver 1 (VERDADERO) en respuesta a 'WM_ERASEBKGND' y realizar el dibujo en' WM_PAINT' (para evitar el parpadeo). También es importante dibujar solo en la pantalla una vez para evitar el parpadeo. Si necesita dibujar algo sofisticado, use DC de memoria para dibujar primero. Manera práctica de obtener uno [aquí] (http://blogs.msdn.com/b/oldnewthing/archive/2011/05/20/10166505.aspx) – demorge

+0

@demorge, si se espera que 'WM_PAINT' haga su propio borrado , entonces deberías devolver 'FALSE' from' WM_ERASEBKGND'. – finnw

Respuesta

4

Esto es totalmente adivina:

vuelta en los días anteriores, llenando un rectángulo con color era una operación relativamente lenta. Pero llenar un gran rectángulo era aún mucho más rápido que llenar muchos rectángulos pequeños.

Supongo que si tenía una ventana con una ventana secundaria, y ambas tenían el mismo pincel de fondo registrado, Windows era lo suficientemente inteligente como para darse cuenta de que no necesitaba enviar un WM_ERASEBKGND al niño cuando ya había borrado el padre. Con un cuadro de diálogo moderadamente complejo en una PC muy lenta, esto podría ser una mejora significativa.

Cuestiones relacionadas