Re: [問題] 所謂在MemDC裡畫(更新)
※ 引述《steven70101 (老人)》之銘言:
: 遇到的問題: (題意請描述清楚)
: 最近再要時間內製作俄羅斯方塊
: 目前已經大致弄好
: 但是卻卡在一個多重貼圖閃爍的問題
: 由於是完全不懂的新手 上網查資料大至知道是要使用雙緩衝
: 或是先畫在memDC裡
: 目前已經修正到閃爍問題改善許多
: 但是方塊本身以及旁邊的計量表有時還是會閃爍
: 還找不到原因改善...
: 問題是 何謂畫在memdc裡呢
: 網路上講的整個都很抽象 偏偏又都沒實際例子
: 唯一有的也都是MFC 偏偏我是用WIN32 API
: 希望得到的正確結果:
: 希望有大大能提出具體例子好讓我了解
: 程式跑出來的錯誤結果:
: 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux)
: 有問題的code: (請善用置底文標色功能)
: http://codepad.org/ACZcWR5v
: 補充說明:
沒辦法…win32api我只寫過幾個月…
之後就投入MFC。 (OS:雖然也一年多沒寫MFC和C++了…
但理論上是相同的。
以這個為範例,
http://www.codeproject.com/KB/graphics/bitmapdc.aspx
他是MFC的程式碼,但你可以把他當成處理WM_PAINT裡的程式碼。
他先用CBitmapDC建立一個memory DC,然後畫在這個memoryDC上面,
這個CBitmapDC解構的時候,會把他裡面的內容,貼回原本的pDC。
那為什麼要這樣做呢?
因為畫在memory上很快,
而原本的pDC會和螢幕上的效果連動,你畫了多少,螢幕就得要更新內容。
所以一次畫好在memory DC上再貼到pDC上,可以減少畫面的更新。
這也是為什麼要先畫在memory DC,然後可以減少閃爍的理由。
但實作上還會有其它造成閃爍的原因,像是在MFC上畫背景的地方畫背景色,
然後在OnDraw畫內容,也會造成閃爍之類的…
或是沒有必要更新畫面的時候更新,或是只需要更新一小塊,
卻更新全螢幕的內容之類的。
--
上士聞道,勤而行之
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 219.84.232.53
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 3 篇):