Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 673
  • Last Modified:

Double buffering Custom control

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
saturn_one
Asked:
saturn_one
1 Solution
 
codewiz51Commented:
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
 
saturn_oneAuthor Commented:
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
Technology Partners: 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!

 
TheAvengerCommented:
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
 
saturn_oneAuthor Commented:
I tried that too, doesn't help!
0
 
saturn_oneAuthor Commented:
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
 
AnnieModCommented:
Question PAQ'd and 500 points refunded

AnnieMod
EE Admin
0

Featured Post

Get expert help—faster!

Need expert help—fast? Use the Help Bell for personalized assistance getting answers to your important questions.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now