有一个画图的基类,我知道怎么画个矩形,方法如下,可画椭圆我怎么实现啊,应该怎么继续我的程序.
不要告诉我去调用系统提供的DrawEllipse,我知道那个方法,请帮助我完成下面的程序就可以了,谢谢//几何图形的基类
public abstract class Shape:Object
{
//绘制图形的Graphics对象
[NonSerialized]protected Graphics m_GraphicsToDrawOn;
//画笔
[NonSerialized]protected Pen m_PenToDrawWith;
//颜色
protected Color m_Color;
//抽象方法Draw,用于在表单上绘制几何图形
public abstract void Draw(Form canvas);
//初始化绘图环境
protected void InitializeGraphics(Form canvas) 
{
m_GraphicsToDrawOn=Graphics.FromHwnd(canvas.Handle);
m_PenToDrawWith=new Pen(Color.Green);
}
//获得背景色
protected Color GetBackgroundColor(Color fgColor)
{
Color bgColor=Color.FromArgb(255-fgColor.R,255-fgColor.G,255-fgColor.B);
return fgColor;
}
}
//画矩形
public class Rectangle : Shape
{
protected Point m_Start;
protected Point m_End;
public Rectangle(Point start, Point end, Color fgColor)
{
m_Start = start;
m_End = end;
m_Color = fgColor;
}
public override void Draw(Form canvas)
{
if (canvas == null)
{
return;
}
InitializeGraphics(canvas);
Point startPoint = canvas.PointToScreen(m_Start);
Point endPoint = canvas.PointToScreen(m_End);
Form1 form1=(Form1)canvas;
Color bgColor=GetBackgroundColor(m_Color);
Size rectSize = new Size(m_End.X - m_Start.X, m_End.Y - m_Start.Y);
System.Drawing.Rectangle rectToDraw=new System.Drawing.Rectangle(startPoint, rectSize);
ControlPaint.DrawReversibleFrame(rectToDraw, bgColor, FrameStyle.Thick);
}
}//画椭圆
public class Ellipse : Shape
{
protected Point m_Start;
protected Point m_End;
public Ellipse(Point start, Point end, Color fgColor)
{
m_Start = start;
m_End = end;
m_Color = fgColor;
}
public override void Draw(Form canvas)
{
if (canvas == null)
{
return;
}
InitializeGraphics(canvas);
Point startPoint = canvas.PointToScreen(m_Start);
Point endPoint = canvas.PointToScreen(m_End);
Form1 form1=(Form1)canvas;
Color bgColor=GetBackgroundColor(m_Color);
Size rectSize=new Size(m_End.X - m_Start.X, m_End.Y - m_Start.Y);
.....................................................................................
}

解决方案 »

  1.   

    可以不在我的程序上修改,能帮我解决就行了,
    也就是说,即使用Graphics.DrawEllipse方法来画我改怎么用?
    谢谢!
      

  2.   

    http://dotnet.aspx.cc/ShowDetail.aspx?id=221BC601-1A1B-4E1F-883D-04B043659703
      

  3.   

    如果不想用系统提供的方法,可以画一个圆,然后沿x或y方向对点做一个变换,比如所有的x乘以2....
      

  4.   

    System.Drawing.Bitmap image = new System.Drawing.Bitmap(100, 100);//创建100*100的Bitmap Graphics g = Graphics.FromImage(image);//转成Graphics 对象g.DrawEllipse(new Pen(Color.Black),5,5,50,25);//用黑色笔,画一个距离左边和上面分别5,宽度50,高度25的椭圆...........后面省略保存等操作,代码是在论坛上写的,不保证所有大小写和拼写都正确.