Re: [問題] 所謂在MemDC裡畫(更新)

看板C_and_CPP作者 (星空下的鮪魚)時間15年前 (2010/11/27 08:03), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/3 (看更多)
※ 引述《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
文章代碼(AID): #1Cy4hdyx (C_and_CPP)
文章代碼(AID): #1Cy4hdyx (C_and_CPP)