Solved

Double buffering Custom control

Posted on 2004-03-28
8
659 Views
Last Modified: 2007-12-19
i created a custome control that draws alot of boxes with text in them uisng GDI, I also implemented a custome scrolling, so when the user tryies to scroll i actually move the panel that contains drawing up and down.

i get alot of flicker while scrolling, i tried using double buffer techniqes but it seems to be to slow or i'm doing some thing worng,
here is the code that uses GDI to draw:


private void DrawProgram (ProgramDetail _program, int channelY)
            {
                  Bitmap offScreenBmp = new Bitmap(_program.ProgramSize.Width, _program.ProgramSize.Width);
                  Graphics GrapoffScreenDC = Graphics.FromImage(offScreenBmp);


                  Rectangle rc =  new Rectangle(new Point(XMargin , YMargin),new Size(_program.ProgramSize.Width - (XMargin * 2) ,_program.ProgramSize.Height-(YMargin * 2))) ;
                  DrawRoundedRectangle(_program.BackColor,rc,MyGraphics);
                  
                        MyGraphics.DrawString(_program.Cat,NoteFont,ProgramBrush,SideMargin + PicDim + SidePicMargin +  _program.LocationX,TopMargin + BetweenMargin + ProgramFont.Size +channelY);

                        
                        //Draw Title Text
                        MyGraphics.DrawString(_program.Title,ProgramFont,ProgramBrush,SideMargin + PicDim + SidePicMargin+_program.LocationX,TopMargin+channelY);
      
                  MyGraphics.DrawImageUnscaled(offScreenBmp,_program.LocationX,channelY);
                  MyGraphics.Dispose  ();
                  offScreenBmp.Dispose();
                  GrapoffScreenDC.Dispose  ();


            }
0
Comment
Question by:saturn_one
8 Comments
 
LVL 2

Expert Comment

by:codewiz51
ID: 10700870
This isn't going to help, and it's not intended as an answer.  I primarily program in MFC/C++.  What you want to do is use a BitBlt to scroll your display rapidly.  When I searched MSDN, I only came up with unmanaged C++ examples and some VB stuff.  So, given that, I think you will need to make some windows api calls to do your scrolling.

I am relatively new to c#, and while I love the language, I have not had a good experience with graphical programming.  I get a lot of the same screen flickering and I have associated it with the performance of .Net.  I have used the techniques from this article on CodeProject to do BitBlt'ing in .Net: http://codeproject.com/vb/net/BitBlt.asp. and http://www.codeguru.com/Csharp/Csharp/cs_graphics/drawing/article.php/c6137/.

Wish I could have been more help, but realtime graphics (ie scrolling) has not been a good thing on .Net.  Everytime I end up using API calls.  The second article shows some better techniques in .Net, but for high speed scrolling, it as less that adequate.
0
 
LVL 48

Expert Comment

by:AlexFM
ID: 10701526
0
 

Author Comment

by:saturn_one
ID: 10701643
i did try putting
SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.DoubleBuffer, true);

in my form constructor, but it doesn't seem to help.i stil get alot of flickers
0
How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

 
LVL 20

Expert Comment

by:TheAvenger
ID: 10701931
Why do you put it in your FORM constructor? Put it in your CONTROL constructor. When you put it in the form, it works for the form, not for the control, and you have a problem in the control.
0
 

Author Comment

by:saturn_one
ID: 10706313
I tried that too, doesn't help!
0
 

Author Comment

by:saturn_one
ID: 10706548
this, might help u guys find what the problems, i figured out that the onpaint method gets called 4-6 times every time i try to scroll! do u think that this could be causing the flicker?
0
 

Accepted Solution

by:
AnnieMod earned 0 total points
ID: 10749327
Question PAQ'd and 500 points refunded

AnnieMod
EE Admin
0

Featured Post

How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

Join & Write a Comment

Introduction This article series is supposed to shed some light on the use of IDisposable and objects that inherit from it. In essence, a more apt title for this article would be: using (IDisposable) {}. I’m just not sure how many people would ge…
Calculating holidays and working days is a function that is often needed yet it is not one found within the Framework. This article presents one approach to building a working-day calculator for use in .NET.
In this tutorial you'll learn about bandwidth monitoring with flows and packet sniffing with our network monitoring solution PRTG Network Monitor (https://www.paessler.com/prtg). If you're interested in additional methods for monitoring bandwidt…
This video explains how to create simple products associated to Magento configurable product and offers fast way of their generation with Store Manager for Magento tool.

705 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

Need Help in Real-Time?

Connect with top rated Experts

15 Experts available now in Live!

Get 1:1 Help Now