2012-02-27 13 views
6

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

+4

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

+0

@demorge, jeśli 'WM_PAINT' ma wykonać własne kasowanie , powinieneś zwrócić 'FALSE' z' WM_ERASEBKGND'. – finnw

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.