原文地址:http://blog.csdn.net/helinlin007/article/details/8072245web
在窗口刷新和繪製的過程當中,經常須要用到窗口刷新函數。通常用於窗口圖形刷新的函數有:UpdateWindows()、Invaldate()、InvaldateRect()。函數
先說UpdateWindows(),當調用這個函數的時候,會當即讓當前的窗口失效,而後對整個窗口當即進行重繪。UpdateWindows()函數調用的時候直接將OnPaint調用到目標窗口,使目標窗口當即進行重繪。spa
而Invaldate()函數的調用則不會當即引發窗口重繪,由於Invaldate()函數是經過調用OnPaint函數來進行窗口繪製的,而OnPaint函數在消息隊列中的處理優先級較低。因此調用Invaldate函數則不會當即引發窗口的重繪。.net
Invaldate函數函數中的參數是用來控制函數是否對背景進行擦除,當使用Invaldate的時候將函數參數設置成true或者不進行設置的時候,函數會對窗口的背景進行擦除,這個時候在刷新窗口的時候,會看到窗口有閃爍現象。而當將參數設置成false的時候,則不會對背景進行擦除,只對繪製的圖形進行擦除,則看不到閃爍現象。orm
而InvaldateRece()函數的消息觸發機制和UpdateWindow差很少,都是在調用該函數以後,會當即觸發調用窗口重繪函數,致使窗口進行重繪。可是InvaldateRect是經過指定失效矩形區域來控制重繪區域的。blog
InvaldateRect函數的參數中也有一個指定是否擦除背景色的參數,具體用法和Invaldate函數的用法一致,在此就再也不敷述。隊列