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
6
A
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
- 1. Hibernate Validator - @Length - Come specificare un messaggio separato per min e max?
- 2. perché esiste un checksum separato nelle intestazioni TCP e IP?
- 3. Rails - Database separato per sottodominio
- 4. Avvio di un processo separato
- 5. Perché abbiamo bisogno di un datastructure separato come B-Tree per database e file system?
- 6. Corpo del messaggio su un messaggio 404
- 7. Whatsapp messaggio per un nuovo numero
- 8. Include esempi di codice in un file separato per Sandcastles
- 9. con un database separato per django-admin in django
- 10. Esiste un plug-in FindBugs separato per Android Studio?
- 11. Voglio creare un dominio separato per le immagini
- 12. jQuery/Colorbox - crea un collegamento separato per aprire il colorbox?
- 13. File server separato per un sito Web php
- 14. NIB di orientamento separato
- 15. Perché un enum è dichiarato in un file separato, in Java?
- 16. Perché un messaggio SOAP devono essere inviati tramite HTTP?
- 17. str_getcsv su un file separato da tabulazioni
- 18. Magento: amministratore su un dominio separato
- 19. Regex per numero separato da virgola
- 20. Jasmine in un progetto di prova separato
- 21. Creazione del ServerSocket in un thread separato?
- 22. separato Partecipa clausola di un Composite Index
- 23. mysqldump con db in un file separato
- 24. Perché il messaggio ritorna alla funzione onMessage()?
- 25. Come ospitare un motore IronPython in un AppDomain separato?
- 26. Messaggio GCM Android per un dispositivo all'altro
- 27. utilizzando il telegramma per inviare un messaggio
- 28. Akka Actor - aspetta un po 'di tempo per aspettare un messaggio, altrimenti invia un messaggio
- 29. Log4Net in un file di configurazione separato
- 30. NSArray separato a un elenco di tipo NSString oggetti
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
@demorge, se si prevede che 'WM_PAINT' esegua la sua cancellazione , quindi dovresti restituire 'FALSE' da' WM_ERASEBKGND'. – finnw