2012-02-27 13 views
6

Non ho mai capito bene perché la cancellazione dello sfondo abbia un messaggio di Windows separato. Mi sembra un po 'ridondante. Quando ho creato pulsanti con il proprietario, ho sempre finito per cancellare lo sfondo dall'interno di WM_PAINT. A volte ho persino eseguito tutto il dipinto da WM_ERASEBKGND e ho lasciato WM_PAINT vuoto. Entrambi sembrano funzionare bene. C'è qualche vantaggio nel separare il dipinto in 2 operazioni?Perché c'è un messaggio separato per WM_ERASEBKGND

+4

Come spiegato di seguito si tratta di un avanzo dei vecchi tempi. Per un'applicazione moderna è necessario sempre restituire 1 (TRUE) in risposta a 'WM_ERASEBKGND' ed eseguire il disegno in' WM_PAINT' (per evitare lo sfarfallio). È anche importante disegnare sullo schermo una sola volta per evitare lo sfarfallio. Se hai bisogno di disegnare qualcosa di fantasia, usa le memorie DC per disegnare prima. Utile modo per ottenerne uno [qui] (http://blogs.msdn.com/b/oldnewthing/archive/2011/05/20/10166505.aspx) – demorge

+0

@demorge, se si prevede che 'WM_PAINT' esegua la sua cancellazione , quindi dovresti restituire 'FALSE' da' WM_ERASEBKGND'. – finnw

risposta

4

Ciò è del tutto azzecca:

indietro nei tempi antichi, riempiendo un rettangolo con il colore era un'operazione relativamente lenta. Ma riempire un grande rettangolo era ancora molto più veloce che riempire un sacco di piccoli rettangoli.

Immagino che se avessi una finestra con una finestra secondaria, ed entrambi avessero lo stesso pennello di sfondo registrato, allora Windows era abbastanza intelligente da rendersi conto che non era necessario inviare un WM_ERASEBKGND al figlio quando era già stato cancellato il genitore. Con una finestra di dialogo moderatamente complessa su un PC molto lento, questo potrebbe essere un miglioramento significativo.

Problemi correlati