I am an old delphi programmer, I am used to creating objects and using them entire time for efficient memory usage. But in c# (maybe all the tutorials I've ever seen), you are creating stuffs with new
every time (thanks to garbage collector!!, let me do the coding)..
Anyway, I am trying to create a designing software which has lots of drawing.
My question is: do I have to create a graphics object, or use the protected override void OnPaint(PaintEventArgs e)
e.Graphics every painting event.. because when I create a graphic object and then resize the control that I draw on, the graphic object that I created, has that clipping problem and only draws old rectangle region..
thanks
If you want to draw on the surface always use the Graphics
object from the Paint
event!
If you want to draw into a Bitmap
you create a Graphics
object and use it as long as you want.
For the Paint
event to work you need to collect all drawing in a List
of graphic actions; so you will want to make a nice class to store all parameters needed.
In your case you may want to consider a mixed approach: Old graphic actions draw into a bitmap, which is the e.g. BackgroundImage
or Image
of your control
Current/ongoing drawing are done on the surface. This amounts to using the bitmap as a cache, so you don't have to redraw lots of actions on every little change etc
This is closely related to your undo/redo
implementation. You could set a limit and draw those before into a Btimap and those after onto the surface..
PS: You also should rethink your GC
attitude. It is simple, efficient and a blessing to have around. (And, yes, I have done my share of TP&Delphi, way back when they were affordable..) - Yes, we do the coding, but GC
is not about coding but about house keeping. Boring at best.. (And you can always design to avoid it, but not with a Graphics
object in a windows system.)