如何解決雙Buffer閃爍問題

在Window控件的client區域顯示動畫或者高速刷新圖像時,一般都會使用雙buffer:
1. 調用函數CreateCompatibleDC創建一個和空間DC兼容的內存DC;
2. 調用函數CreateCompatibleBitmap創建兼容位圖並選入內存DC;
3. 在內存DC內繪圖;
4. 調用UpdateWindow、RedrawWindow或InvalidateRect通知控件刷新client區;
5. 截獲WM_PAINT消息,並調用BitBlt等blt函數將內存DC的內容拷到空間client區。
但有時控件client區刷新時,還是有閃爍。這是因爲在截獲WM_PAINT前,client區的背景被erased了。解決辦法有兩個:
1. 截獲WM_ERASEBKGND,直接返回0;
2. 調用函數InvalidateRect時,bErase設爲FALSE,以避免erase background。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章