I was looking about some GDI tutorial but everything I have found so far works with OnPaint method, which passes Paintarguments to Graphics. I have not found how to start from scratch, I mean how to use Graphics class itself?
This is the whole code I have treid that just doesnt work for me:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
Pen pen= new Pen(Color.Red, 3);
Graphics g;
g = this.CreateGraphics();
g.DrawEllipse(pen, 150, 150, 100, 100);
}
}
}
It just doesnt do anything. I tried it in new form, nothing.
Thank you in advance!
The code is probably OK, it is drawing a ellipse as you are hoping for. However, after the Load event, there will be a
PaintBackgroundevent and aPaintEventas the form is displayed. ThePaintBackgroundwill, by default, erase the contents of the control, effectively removing the ellipse you’ve just drawn.Painting is a two stage process:
The window manager only redraws the parts of the control that require updating, if the contents of the control haven’t changed or no user action has altered the control’s visibility then no painting is done.
So, why do you want to draw the ellipse in the Load method? Usually, you only want to draw something when something needs to be drawn, and your form is told when something needs drawing in the
PaintBackgroundandPaintevents.Are you worried about flickering? Or is it a speed issue? Ellipses are quick to draw. Flickering, however, is harder to fix. You need to create a bitmap, draw to the bitmap and blit the bitmap to the control during the Paint event. Also, make the
PaintBackgroundevent do nothing – no erasing the control, it’s the erasing that causes the flicker.EDIT: An example, I’m using DevStudio 2005 here.
In Form1.cs add the following:
Compile and run.