做个CAD相关的软件主界面中有个背景色黑色的pictureBox用来paint需要的图形,所有坐标网格,图形都在这个黑底下显示,想把显示的这部分封装到一个类里边给frmMain调用,图形界面的现实对实时性要求较高,想请问这样的情况用静态类还是动态类?
        private void picBoxCoordinate_Paint(object sender, PaintEventArgs e)
        {        }是在picBox的Paint事件里调用这个类的绘图方法么?那为何我在这个类里没法写
protected override void OnPaint(PaintEventArgs e)
这样的方法呢?我这样的情况到底要怎么初始化啊?谢谢各位了,第一次接触GDI+

解决方案 »

  1.   

          
    class frmMain里是这样的:
      private void picBoxCoordinate_Paint(object sender, PaintEventArgs e)
            {
                DrawCAD.DrawCoordinateSystem(sender, e, ClientRectangle);
            }
    然后新建了个静态类cs文件
        public static class DrawCAD
        {
            public static void DrawCoordinateSystem(object sender, PaintEventArgs e, Rectangle ClientRectangle)
            {
                Graphics g = e.Graphics;
            }
        }
    在我新建的静态类里无法获取ClientRectangle,不知为何,于是我把frmMain里picBox的ClientRectangle也当参数传到静态类的方法里了只能这样了么?
      

  2.   

    建议LZ自定义一个用户控件,然后再在上面画图protected override void OnPaint(PaintEventArgs e)
    是重写基类的虚函数,你怎么可能在窗体类中重写PictureBox类的虚函数呢
    只能写PictureBox控件的paint事件打个比方,假如你写一个winform程序,Form1继承自Form类,所以你可以在Form1中重写OnPaint方法,
    但是,你要是在Form1中加一个PictureBox控件,你就不能重写该PictureBox控件的OnPaint方法了,原因是你没有继承PictureBox类