Click here to Skip to main content
15,891,423 members
Articles / Desktop Programming / MFC
Article

Drawing without flicker

Rate me:
Please Sign up or sign in to vote.
4.29/5 (19 votes)
28 Jun 20021 min read 184.1K   61   34
Steps for Double buffering ( Drawing without flicker )

Explanation of Double Buffering

If you have to draw repeatedly to the screen in a short period of time, then when you keep drawing step by step to the DC, it updates the Window again and again which makes the screen flicker.

To avoid this, we first draw to a DC in memory (see the CDC MemDC and CBitmap MemBitmap declarations), and we store the resultant drawing in a memory bitmap. After all the drawing has been completed, we move the bitmap from the memory to the screen in a fast single bitblt call. Thus, we only need to draw once to the screen which avoids flickering totally. This principle is called Double Buffering.

Example code

This example assumes that you are going to draw filled rectangles onto the screen. It generates random shades of green to fill that rectangle.

Use this code in your view class's OnDraw() function if you are using Doc/View architecture or if you are using a dialog based application, then you can add this code in the OnPaint Function.

CRect rcClient;
GetClientRect(rcClient);    // See Note 1

CDC MemDC,*pDC;
CBitmap MemBitmap;

pDC = this->GetDC()         // Get Current DC
MemDC.CreateCompatibleDC(pDC);
MemBitmap.CreateCompatibleBitmap(pDC,rcClient.right,rcClient.bottom);

CBitmap *pOldBitmap = MemDC.SelectObject(&MemBitmap);
CBrush bkBrush(HS_FDIAGONAL,RGB(0,rand()%255,0));   // See Note 2
MemDC.FillRect(rcClient,&bkBrush);

pDC->BitBlt(0,0,rcClient.right,rcClient.bottom,&MemDC,0,0,SRCCOPY);  //See Note 3
MemDC.SelectObject(pOldBitmap);

Note 1 : Gets the coordinates of the bounding rectangle.
Note 2 : Creates a brush with random shades of green. The rand()%255 generates a value between 0 and 255 randomly.
Note 3 : Copies the bitmap from the memory dc to the pdc using a fast bitblt function call.

I hope that i have made it clear to you. Good Luck.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
Founder
India India
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
GeneralRe: reinventing the weel Pin
Christian Graus29-Jun-02 18:49
protectorChristian Graus29-Jun-02 18:49 
GeneralRe: reinventing the weel Pin
WREY2-Jul-02 13:38
WREY2-Jul-02 13:38 
GeneralRe: reinventing the weel Pin
Christian Graus2-Jul-02 14:14
protectorChristian Graus2-Jul-02 14:14 
GeneralRe: reinventing the weel Pin
Christian Graus2-Jul-02 19:00
protectorChristian Graus2-Jul-02 19:00 
GeneralRe: reinventing the weel Pin
Christian Graus2-Jul-02 20:45
protectorChristian Graus2-Jul-02 20:45 
GeneralRe: reinventing the weel Pin
WREY3-Jul-02 1:48
WREY3-Jul-02 1:48 
GeneralRe: reinventing the weel Pin
Christian Graus3-Jul-02 1:51
protectorChristian Graus3-Jul-02 1:51 
GeneralRe: reinventing the weel Pin
WREY3-Jul-02 13:40
WREY3-Jul-02 13:40 
That's it, Christian, that is exactly IT!!! For those of us who believe in the high ideals of CodeProject (and clearly you do, as likewise myself) we elevate and expand that culture by NOT repeating the ills that someone else has done against us.

If others in the past have critized you for the kind of article you've written, you do nothing to promote the good and amiable culture of CodeProject by repeating that kind of negative treatment to a fellow member.

I agree your point has merit, but what good does it serve if you administer it with a backhand?

You are a pretty smart person who has the intellectual prowess to influence a lot of changes to this website, and for that I believe CodeProject is fortunate to include you among its membership. My exhortation to you is to be that distinguished figure and model, for others to look up to and emulate.

IOW, be cool, Christian, be cool !!!!

Cool | :cool:

William
GeneralRe: reinventing the weel Pin
Christian Graus3-Jul-02 13:48
protectorChristian Graus3-Jul-02 13:48 
GeneralRe: reinventing the weel Pin
WREY3-Jul-02 14:51
WREY3-Jul-02 14:51 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.