Nigdy nie do końca rozumiem, dlaczego usuwanie tła ma osobny komunikat systemu Windows. Dla mnie wygląda na zbędnego. Kiedy utworzyłem przyciski rysowane przez właściciela, zawsze kończyło mi się usuwanie tła z wewnątrz WM_PAINT. Czasami nawet zrobiłem cały obraz z wnętrza WM_ERASEBKGND i zostawiłem WM_PAINT puste. Oba wydają się działać dobrze. Czy można oddzielić obraz na 2 operacje?Dlaczego istnieje osobny komunikat dla WM_ERASEBKGND
6
A
Odpowiedz
4
Jest to całkowicie odgadnie:
powrotem w dawnych czasach napełniania prostokąt kolor był stosunkowo powolne działanie. Ale wypełnienie jednego dużego prostokąta było jeszcze szybsze niż wypełnianie mnóstwa małych prostokątów.
Domyślam się, że jeśli miałeś okno z okienkiem podrzędnym i oba miały ten sam zarejestrowany pędzel tła, wtedy Windows był na tyle sprytny, aby zdać sobie sprawę, że nie musiał wysyłać WM_ERASEBKGND do dziecka, kiedy już to wyczyściło rodzic. Przy umiarkowanie złożonym oknie dialogowym na bardzo wolnym komputerze może to być znacząca poprawa.
Jak wyjaśniono poniżej, jest to pozostałość po dawnych czasach. W przypadku nowoczesnej aplikacji zawsze powinieneś zwrócić 1 (PRAWDA) w odpowiedzi na 'WM_ERASEBKGND' i wykonać rysunek w' WM_PAINT' (aby uniknąć migotania). Ważne jest również, aby rysować tylko raz, aby uniknąć migotania. Jeśli chcesz narysować coś eleganckiego, użyj pamięci DC, aby narysować pierwszy. Poręczny sposób na uzyskanie jednego [tutaj] (http://blogs.msdn.com/b/oldnewthing/archive/2011/05/20/10166505.aspx) – demorge
@demorge, jeśli 'WM_PAINT' ma wykonać własne kasowanie , powinieneś zwrócić 'FALSE' z' WM_ERASEBKGND'. – finnw