Visual C++中實現雙緩衝的基本原理

來源:互聯網
上載者:User

  雙緩衝的原理可以這樣形象的理解:把電腦螢幕看作一塊黑板。首先我們在記憶體環境中建立一個“虛擬“的黑板,然後在這塊黑板上繪製複雜的圖形,等圖形全部繪製完畢的時候,再一次性的把記憶體中繪製好的圖形“拷貝”到另一塊黑板(螢幕)上。採取這種方法可以提高繪圖速度,極大的改善繪圖效果。

  例如在OnDraw()函數中可以如下所述實現雙緩衝,其主要步驟分為四步:

  

      CPen Pen;

      Pen.CreatePen(PS_INSIDEFRAME,1,RGB(225,225,0));

  CBrush Brush;Brush.CreateSolidBrush(RGB(225,225,0));

  CDC dcMem;CBitmap bm;

  CRect rc;

  GetClientRect(&rc);

  // Step 1:為螢幕DC建立相容的記憶體DC :

  CreateCompatibleDC()dcMem.CreateCompatibleDC(pDC);

  // Step 2:建立位元影像:

  CreateCompatibleBitmap()bm.CreateCompatibleBitmap(pDC,rc.Width(),rc.Height());

  // Step 3:把位元影像選入裝置環境:SelectObject(),可以理解為選擇畫布dcMem.SelectObject(&bm);

  dcMem.SelectObject(Pen);

  dcMem.SelectObject(Brush);

  dcMem.Ellipse(0,0,50,50);

  //畫橢圓// Step 4:把繪製好的圖形“拷貝“到螢幕上:BitBlt()pDC->BitBlt(0,0,rc.Width(),rc.Height(),&dcMem,0,0,SRCCOPY);

  dcMem.DeleteDC();

  bm.DeleteObject();

  這樣便實現了雙緩衝,通過這個方法可以防止在VC中畫圖時出現螢幕閃爍的情況。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.