我想通過算出一組資料來控制一個物塊移動,并動態的繪制出來。現在完成了,但是在OnTimer中呼叫了InvalidateRect函式導致閃爍過快怎么辦?
uj5u.com熱心網友回復:
是否使用了雙緩沖(double buffering),即不要直接在視窗中繪制,而是先繪制到位圖,然后將位圖繪制到視窗。可以百度雙緩沖,很多資料。
很多時候重繪視窗背景也會導致視窗閃爍,解決方法是多載OnEraseBkgnd,回傳false。具體也可以搜索。
另外Timer時間間隔是否有影響,也可以測驗下。
如果對您有幫助,請采納答案好嗎,謝謝!
uj5u.com熱心網友回復:
繪制時會先擦除背景,背景色和繪制內容色差太大就會讓人感覺到閃爍,解決辦法就是重寫OnEraseBkgnd ,然后創建記憶體位圖,先將內容繪制在記憶體位圖上,繪制完畢后BitBlt到視窗,具體方案也是搜索MFC 雙緩沖“”uj5u.com熱心網友回復:
你繪圖的操作是如何寫的?uj5u.com熱心網友回復:
最好的解決辦法就是 雙緩沖, 加直接繪制,呼叫invalidate這類的函式時, MFC會先繪制背景, 再繪制控制元件. 這就會導致閃爍. 這也是很多人說雙緩沖還會閃的根源所在.
最好的做法就是在ontimer的時候, 直接呼叫繪制函式, 繪圖(也可以控制重繪區域). 當然, OnPaint中也要呼叫繪圖函式, 只是這里的繪制是在切換視窗的時候呼叫, 就不要invalidate了
uj5u.com熱心網友回復:
雙緩沖 雙緩沖 雙緩沖
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/95380.html
標籤:基礎類
上一篇:WH_CALLWNDPROC怎么在win7下 截獲記事本的wm_close訊息
下一篇:聊天視窗如何實作實時滾動?
