using System; using System.Collections; using System.Drawing; using System.Drawing.Imaging; namespace Ktest { /// <summary> /// Kbuilder 的摘要说明。 /// </summary> public class Kbuilder { private int bottomMarge=10; private int leftMarge=20; /// <summary> /// 默认宽度 /// </summary> private int m_width=640; /// <summary> /// 高度默认400像素 /// </summary> private int m_height=480; /// <summary> /// 默认显示30天数据 /// </summary> private int m_lineCount=30; /// <summary> /// 默认显示的最高价50元 /// </summary> private int m_maxPrice=50; /// <summary> /// 存放价格表 /// </summary> private ArrayList m_prices; public Kbuilder() { m_prices=new ArrayList(); } /// <summary> /// 宽度 /// </summary> public int Width { get { return m_width; } set { m_width=value; } } /// <summary> /// 高度 /// </summary> public int Height { get { return m_height; } set { m_height=value; } } /// <summary> /// 显示线数 /// </summary> public int LineCount { get { return m_lineCount; } set { m_lineCount=value; } } public int MaxPrice { get { return m_maxPrice; } set { m_maxPrice=value; } } /// <summary> /// 添加价格 /// </summary> /// <param name="openPrice">开盘价</param> /// <param name="maxPrice">最高价</param> /// <param name="minPrice">最低价</param> /// <param name="closePrice">收盘价</param> public void Add(double openPrice,double maxPrice,double minPrice,double closePrice) { Ktest.Price a=new Price(); a.Open=openPrice; a.Max=maxPrice; a.Min=minPrice; a.Close=closePrice; if (m_prices.Count>=m_lineCount) { m_prices.RemoveAt(0); } m_prices.Add(a); } /// <summary> /// 画图 /// </summary> /// <returns></returns> public Bitmap GetImage() { Bitmap image = new Bitmap(m_width,m_height); Graphics g = Graphics.FromImage(image); Pen black1=new Pen(Color.Black,1); Pen black2=new Pen(Color.Black,2); Pen red=new Pen(Color.Red,1); Point o=new Point(leftMarge,m_height-bottomMarge); Point y=new Point(leftMarge,0); Point x=new Point(m_width,m_height-bottomMarge); Font font=new Font("宋体",8); int hStep=(m_height-bottomMarge)/m_maxPrice; int wStep=(m_width-leftMarge)/m_lineCount; g.Clear(Color.White); g.DrawLine(black2,y,o); g.DrawLine(black2,o,x); for(int i=1;i<=m_maxPrice;i++) { g.DrawString(i.ToString(),font,Brushes.Black,1,m_height-bottomMarge-hStep*i); } for(int i=1;i<=m_lineCount;i++) { g.DrawString(i.ToString(),font,Brushes.Black,wStep*i,m_height-bottomMarge+1); } g.Save(); int iCount=0; foreach(Price p in m_prices) { int x1,x2,x3,y1,y2,y3,y4; x1=leftMarge+iCount*wStep+3; x2=x1-3+(int)wStep/2; x3=(leftMarge+wStep*iCount++)-2; y1=m_height-bottomMarge-(int)p.Max*hStep; y4=m_height-bottomMarge-(int)p.Min*hStep; System.Drawing.Brush brush; Pen curPen; if (p.Positive) { curPen=red; brush=System.Drawing.Brushes.Red; y3=m_height-bottomMarge-(int)p.Open*hStep; y2=m_height-bottomMarge-(int)p.Close*hStep; } else { curPen=black1; brush=System.Drawing.Brushes.Black; y2=m_height-bottomMarge-(int)p.Open*hStep; y3=m_height-bottomMarge-(int)p.Close*hStep; } g.FillRectangle(brush,x1,y2,wStep-5,y3-y2); g.DrawLine(curPen,x2,y1,x2,y4); } return image; } } }

|