? 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
6
A
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
- 1. Iniciar un proceso por separado
- 2. ¿Por qué hay un NSInteger?
- 3. ¿Hay alguna forma de establecer un título corto por separado para UITabBar?
- 4. GitHub emite un reintegro por separado?
- 5. ¿Por qué los comandos y eventos se representan por separado?
- 6. Regex para el número separado por comas
- 7. ¿Por qué hay un código inalcanzable aquí?
- 8. Cómo convertir un archivo separado por tabulaciones en coma archivo separado por
- 9. ¿Por qué no hay un operador [] para una lista estándar?
- 10. ¿Por qué hay un nuevo especial y eliminar para matrices?
- 11. ¿Por qué no hay un método getContentView() para la actividad?
- 12. ¿Por qué no hay un evento SelectedNodeChanged para Windows.Forms.TreeView?
- 13. ¿Por qué no hay Xcode para Windows?
- 14. ¿Hay un mensaje SetText para el control Win32 ListBox?
- 15. ¿Por qué hay CL_DEVICE_MAX_WORK_GROUP_SIZE?
- 16. ¿Por qué hay un glMatrixMode en OpenGL?
- 17. ¿Por qué usar `git commit` cuando está separado?
- 18. ¿Por qué obtengo un mensaje desconectado de emulator-5554?
- 19. ¿Cómo imprimo un campo desde un archivo separado por tubería?
- 20. ¿Por qué no hay un documento.createHTMLNode()?
- 21. ¿Por qué no hay un String # shift()?
- 22. ¿Por qué no hay un método Convert.toFloat()?
- 23. GZip cada archivo por separado
- 24. Inicializando un objeto Java en un método separado: por qué esto no funcionará
- 25. ¿Por qué hay imageCreateFrom * si hay imageCreateFromString?
- 26. ¿Cómo uso UIPageViewController para cargar XIB por separado?
- 27. OpenCV para Android, ¿necesito instalar OpenCV Manager por separado?
- 28. analizando un archivo separado por tabuladores en Python
- 29. ¿Por qué no hay un método Linq para devolver valores distintos por un predicado?
- 30. ¿Almacena sus clases de ayuda en un ensamblaje por separado?
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
@demorge, si se espera que 'WM_PAINT' haga su propio borrado , entonces deberías devolver 'FALSE' from' WM_ERASEBKGND'. – finnw