WM_Paint並不是每次都畫整個窗體,而是根據需要,重畫“無效區域”。
例如,當我們在窗體上拖動一個button,若只發送了矩形的新位置給WM_PAINT,而沒有發送原先矩形所在的舊位置給
WM_ERASEBKGND,那麼在button原先所在的矩形區域就會有殘留的畫面。
WM_ERASEBKGND並不是必須的,但如果窗體的表面發生變化(如原來被其他窗口蓋住或其他窗口離開原來的區域),那麼系統會發送這個消息給窗體來填充這些區域。
例如,我們在桌面上(desktop)拖動窗體,桌面就會被通知WM_ERASEBKGND。同樣,當其他窗口經過我們的自己的窗口時,也會發生此過程。