Solved

Flikering

Posted on 2000-02-20
8
218 Views
Last Modified: 2013-11-20
I am working on istrument interfacing project on VC++ 6.0.
in which i am showing differerent displayes like grpah ,tabular,analog,digital.
i am using bitblt function to draw background of grah & platting graoh in onDraw with linto moveto function.
i am invalidating area bounded by x- y axis of graph.
Then also i am getting flikering,
can anybody will suggest me how to go for this problem.
0
Comment
Question by:jaydeep
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 3
  • 2
8 Comments
 

Expert Comment

by:bertp
ID: 2540394
two suggestions

first and easiest:
override the CWnd::OnEraseBkgnd()mesage;
afx_msg BOOL OnEraseBkgnd( CDC* pDC )
simply return TRUE to tell
windows to not erase the client area
before you draw.  this might be sufficient for you...

second if you still see flicker aand you have confirmed that your OnEraseBkgrnd is being called and is  returning a nonzero value.. then you shoud draw instead to a memory DC instead of to a window dc..
after you have finished building your memory dc, just blit the memory dc to the window dc....

In case you need it I have found an explicit example with explanation at:
http://codeguru.developer.com/misc/flicker_free_drawing.shtml

good luck


 
0
 

Author Comment

by:jaydeep
ID: 2541076
hi!
i tried erase background,if i override
that & return true it doesn't do anything.it doesn't paint at all
one more thing i am arealy using bilblt
using memory DC.i will explain you what io am doing.
1.i am drawing on memedc(that bkgroung og graph
2.draeong(plaotting graph in ondraw))
3.to show updated regoin i have to invalidate bounded rect by x-y.
4. so that invalidted region flikers.

i ahve seen one example in MSDN help.
a cor moving ,there is tree behind it.it doesn't fliker at all,even yoy can see tree through car window,there is not at all flokering.they have used masking,i did not uderstand it.

one more thing the rate at which i am getting reading from intruments is 10 raedings/sec
0
 

Expert Comment

by:bertp
ID: 2543005
hmmm, I used this technique back in the days of  c & the sdk and it worked fine so I would  suspect that it has something to do with the doc/view system of MFC... except that the example in the link I posted specifically mentions a view...

guessing bigtime here,  perhaps you are rendering only a portion but redrawing the whole view with a MemDC that is mostly the background color...  see what happens if you rerender the whole view each time and redraw the whole view with each OnDraw... If this works then you can continue on a figure out why you cannot draw just the portion. But unless your view requires alot of
complex calculations or disk access it will probably be just as flicker-free to redraw the whole view on each OnDraw()
0
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 

Expert Comment

by:bertp
ID: 2558479
Hi
  If you're still having trouble you should consider rejecting my answer so that you can again get help from others
Good Luck!
0
 

Accepted Solution

by:
leandrobecker earned 15 total points
ID: 2619944
First:

Only return TRUE when receive the WM_ERASEBKGND:

Example

BOOL CYourWnd::OnEraseBkgnd(CDC* pDC)
{
      return FALSE;
}

Second:

In your paint function use a memory DC like this:

void CYourWnd::OnPaint()
{
      CPaintDC dc(this); // device context for painting
      CDC memDC;
      CBitmap bitMem,*bitOld;
        CRect rect;
        GetClientRect(&rect);

      memDC.CreateCompatibleDC(&dc);

      
bitMem.CreateCompatibleBitmap(&dc,rect.Width(),rect.Height());

      bitOld = memDC.SelectObject(&bitMem);

       memDC.FillSolidRect(&rect,0x00FFFFFF);
      
      //do your paints using memDC

      dc.BitBlt(0,0,rect.Width(), rect.Height()),&memDC,0,0,SRCCOPY);

      memDC.SelectObject(OldFont);
      memDC.SelectObject(bitOld);
}
0
 

Author Comment

by:jaydeep
ID: 2620828
hi!
thanks for help.
i could solve this problem,
There was problem with sequence of function call.

Now i am i am not erasing present background i am calling Invalidate(FALSE)
 & where i need immidiate refelction of change i am calling UpdateWindow,which
calls WM_PAINT with priority,
this solved my problem

thanks for help
0
 

Expert Comment

by:leandrobecker
ID: 2623580
HI jaydeep

If the answer has helped you, please
select it how the answer for you question. Thanks
0
 

Author Comment

by:jaydeep
ID: 2787001
i have already solved the problem ,
thanks for help.

jaydeep
0

Featured Post

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
move a line in eclipse 3 109
SQUD PROXY SERVER, UNIX, SLL/HTTPS 5 116
Capture logon name 13 105
c++  placing data into a form and an editbox 5 25
Introduction: Dialogs (1) modal - maintaining the database. Continuing from the ninth article about sudoku.   You might have heard of modal and modeless dialogs.  Here with this Sudoku application will we use one of each type: a modal dialog …
Exception Handling is in the core of any application that is able to dignify its name. In this article, I'll guide you through the process of writing a DRY (Don't Repeat Yourself) Exception Handling mechanism, using Aspect Oriented Programming.
This video will show you how to get GIT to work in Eclipse.   It will walk you through how to install the EGit plugin in eclipse and how to checkout an existing repository.
The Email Laundry PDF encryption service allows companies to send confidential encrypted  emails to anybody. The PDF document can also contain attachments that are embedded in the encrypted PDF. The password is randomly generated by The Email Laundr…

726 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question