Invalidate(false)表示不擦除背景,直接畫。
Invalidate標記壹個需要重繪的無效區域,並不意味著調用該函數後就立刻進行重繪。類似於PostMessage(WM_PAINT),需要處理到WM_PAINT消息時才真正重繪。以為您Invalidate之後還有其他的語句正在執行,
程序沒有機會去處理WM_PAINT消息,但當函數執行完畢後,消息處理才得以進行。Invalidate只是放壹個WM_PAINT消息在隊列裏,不做別的,所以只有當當前函數返回後,進入消息循環,取出WM_PAINT,才執行PAINT,所以不管Invalidate放哪裏,都是最後的。
擴展資料
Invalidate(FALSE)與Invalidate(TRUE)區別
使用Invalidate(FALSE)函數時,它只會向消息隊列中添加了WM_PAINT消息。
使用Invalidate(TRUE)函數時,它會向消息隊列中添加了WM_ERASEBKGND和WM_PAINT兩個消息。
WM_ERASEBKGND消息的作用以背景色填充客戶區,因此他會將之前繪制的圖像情況,然後響應WM_PAINT消息後,會調用OnPaint函數,進行響應圖像繪制工作。故Invalidate(TRUE)相當於將原來畫的內容清空後,重新繪制。