热门文章 | 热门软件| 热门源码 | 热门电影 | 知识库 | 联系我们
软件 源码 教程 影视 健康 招聘
  HTML | JavaScript | ASP | PHP | JSP | NET | VB | VC | VF | Windows | Linux | Mysql | Mssql | Oracle | Struts 
当前位置: 创世纪计算机资源网 -> 文章频道 ->vc 
站内搜索:
用C#创建PDA应用程序的柱形图控件(5)
作者:佚名 来源:天极开发 整理日期:2007-10-19

//由顶点与长、宽、高画颜色为color,背景色为的BackColor图表(3D)
private void DrawGridLineAndTexts(Point p,int Width)
{//是否显示网络水平线
if (this.mShowGrid)
{
this.objGraph.DrawGridLines(this.mGridLineColor,p,Width-1,this.mLenght,this.BetweenLineHeight,this.LineCount);
}

//是否显示左文本
if (this.mShowYText)
{
Point p1=p;
//p1.X-=this.mLenght;
p1.Y+=Lenght;
double a1=double.Parse(System.Convert.ToString(this.LineCount-1));
double a2=double.Parse(this.mMaxYValue.ToString());
double a=System.Math.Round(a2/a1,1);

for(int i=0;i {
string Text=System.Convert.ToString(a*(i+1));
int txtWidth=(int)objGraph.mGraphics.MeasureString(Text,this.mTe
xtFont).Width;
p1.X=p.X-txtWidth-this.mLenght;;
p1.Y-=this.BetweenLineHeight;
this.objGraph.DrawText(Text,Color.Black,this.mTextFont,p1.X,p1.Y);
}
}
}
//求数据列的和
private double SumColumn(DataTable dt,string ColumnName)
{
double Sum=0.0;
foreach(DataRow dr in dt.Rows)
{
Sum+=System.Convert.ToDouble(dr[ColumnName]);
}
return Sum;
}
}

#region
public class MyGraph
{
//网络水平线中二线之间的高
//int BetweenLineHeight=20;
//最大MaxYCount:线数
// int MaximumY=10;
// int Lenght=5;
// int Width=200;
// int Height=300;
// bool IsShowGrid=true;

public Graphics mGraphics;

//背景色
// public Color BackColor= System.Drawing.SystemColors.Control;
// //X轴颜色
// public Color AxesXColor=System.Drawing.SystemColors.HighlightText;
// //Y轴颜色
// public Color AxesYColor=System.Drawing.SystemColors.Info;

//黑色笔
private Pen mBlackPen = new System.Drawing.Pen(Color.FromArgb(0,0,0));
//网格线笔
private Pen mGridPen= new System.Drawing.Pen(Color.FromArgb(127, 127,
127));
//Color BackColor= System.Drawing.Color.FromArgb(((System.Byte)(224)), ((System.Byte)(224)), ((System.Byte)(224)));

public MyGraph()
{
//mGraphics=this.CreateGraphics(); //
// TODO: 在此处添加构造函数逻辑
//
}

//由左下顶点与宽、高画颜色为color的平行四边形
public void DrawRectangle3DTop(Color color, Point LeftUnderPoint,int
Width,int Height)
{
try
{

//计算左上顶点
Point p1=new Point ();
p1.X=LeftUnderPoint.X+Height;
p1.Y=LeftUnderPoint.Y-Height;

//计算右上顶点
Point p2=new Point ();
p2.X=LeftUnderPoint.X+Width+Height;
p2.Y=LeftUnderPoint.Y-Height;

//计算右下顶点
Point p3=new Point ();
p3.X=LeftUnderPoint.X+Width;
p3.Y=LeftUnderPoint.Y;
Point[] curvePoints =
{
LeftUnderPoint,
p1,
p2,
p3
};

// Define fill mode.
//FillMode newFillMode = FillMode.Winding;
// Fill polygon to screen.
// Create solid brush.
SolidBrush Brush = new SolidBrush(color);
mGraphics.FillPolygon(Brush, curvePoints);
//mGraphics.FillPolygon(Brush, curvePoints, newFillMode);
//画边框
mGraphics.DrawPolygon(this.mBlackPen, curvePoints);
}
catch(Exception ex)
{
string str=ex.Message;
}

}
//由左下顶点与宽、高画颜色为color的平等四边形
public void DrawRectangle3DRight(Color color, Point LeftUnderPoint,int Width,int Height)
{
try
{
// Create solid brush.
SolidBrush Brush = new SolidBrush(color);

//计算左上顶点
Point p1=new Point ();
p1.X=LeftUnderPoint.X;
p1.Y=LeftUnderPoint.Y-Height;

//计算右上顶点
Point p2=new Point ();
p2.X=p1.X+Width;
p2.Y=p1.Y-Width;

//计算右下顶点
Point p3=new Point ();
p3.X=LeftUnderPoint.X+Width;
p3.Y=LeftUnderPoint.Y-Width;
Point[] curvePoints =
{
LeftUnderPoint,
p1,
p2,
p3
};

// Define fill mode.
//FillMode newFillMode = FillMode.Winding;
// Fill polygon to screen.
mGraphics.FillPolygon(Brush, curvePoints);
//画边框
mGraphics.DrawPolygon(this.mBlackPen, curvePoints);
//mGraphics.FillPolygon(Brush, curvePoints, newFillMode);
}
catch(Exception ex)
{
string str=ex.Message;
}
}

//由左上角顶点与宽、高画颜色为color的平行四边形
public void DrawRectangle(Color color, Point P,int Width,int Height)
{
Rectangle Rectangle1=new Rectangle( P.X,P.Y, Width,Height);

// Create solid brush.
SolidBrush Brush = new SolidBrush(color);
// Fill polygon to screen.
mGraphics.FillRectangle(Brush, Rectangle1);

//画边框
mGraphics.DrawRectangle(this.mBlackPen,Rectangle1);

}

//由左下顶点与长、宽、高画颜色为color的立方图形(3D)
public void DrawCube(Color color, Point LeftUnderPoint,int Lenght,int Width,int Height)
{
// Create solid brush.
SolidBrush Brush = new SolidBrush(color);


Point LeftTopPoint= LeftUnderPoint;
LeftTopPoint.Y-= Height;

DrawRectangle3DTop(color,LeftTopPoint,Width,Lenght);
DrawRectangle(color,LeftTopPoint,Width,Height);

Point RightP=LeftUnderPoint;
RightP.X+=Width;
DrawRectangle3DRight(Color.Black,RightP,Lenght,Height);
}

//画X轴
public void DrawAxesX(Color color, Point p,int Width,int Height)
{
DrawRectangle3DTop(color,p,Width,Height);
}

//画Y轴
public void DrawAxesY(Color color, Point p,int Width,int Height)
{
DrawRectangle3DRight(color,p,Width,Height);
}

//由顶点与长、宽、高画颜色为color,背景色为的BackColor图表(3D)
public void DrawPDAChart(Color GridLineColor,Color AxesXColor,Color AxesYColor,_
 Color BackColor,Point p,int Lenght,int Width,int Height,bool IsShowAxesX,bool IsShowAxesY)
{
if(IsShowAxesX)
{
//画X轴
DrawAxesX(AxesXColor,p,Width,Lenght);
}
if(IsShowAxesY)
{
//画Y轴
DrawAxesY(AxesYColor,p,Lenght,Height);
}

////画图形区
Point pRectangle=p;
pRectangle.X+=Lenght;
pRectangle.Y-=Lenght;
pRectangle.Y-=Height;
DrawRectangle(BackColor,pRectangle,Width,Height);
}
//画一条水平网络线与对应的折线
public void DrawGridLine(Color GridLineColor,Point p,int Width,int Lenght)
{
//Draw the Y scale;
Point EndP=p;
EndP.X+=Width;
Pen pen=new Pen( GridLineColor);
//this.mGraphics.DrawLine(pen,p,EndP);
//水平线
this.mGraphics.DrawLine(pen,p.X,p.Y,EndP.X,EndP.Y );
//左折线
this.mGraphics.DrawLine(pen,p.X,p.Y,EndP.X-Lenght,EndP.Y+Lenght );
}
//画所有水平网络线
//p:起始点;Width:线宽;BetweenHeight:二线之间高,Count:线数
public void DrawGridLines(Color GridLineColor,Point p,int Width,int
Lenght,int BetweenHeight,int Count)
{
Pen pen=new Pen( GridLineColor);
for(int i=0;i {
//DrawGridLine(GridLineColor,p,Width,Lenght);
//水平线
this.mGraphics.DrawLine(pen,p.X,p.Y,p.X+Width,p.Y );
//左折线
this.mGraphics.DrawLine(pen,p.X-Lenght+1,p.Y+Lenght,p.X,p.Y);
p.Y-=BetweenHeight;
}
}

//在位置(x,y)处以颜色color、字体font写文本text
public void DrawText(string text,Color color, Font font,int x,int y)
{
// Create solid brush.
SolidBrush Brush = new SolidBrush(color);
this.mGraphics.DrawString(text, font, Brush, x ,y);
}

//由点p(矩形左上角点),宽pieWidth,高pieHeight,颜色color画馅饼图
public void DrawCake(Color color,Point p,int pieWidth,int pieLenght,int pieHeight)
{
Pen PenBlack=new Pen( Color.Black);
//黑色最下面的椭圓
Rectangle rc1 =new Rectangle(p.X,p.Y+pieHeight,pieWidth,pieLenght);
this.mGraphics.DrawEllipse(PenBlack,rc1);

SolidBrush objBrush = new SolidBrush(color);

for(int i=0;i {
this.mGraphics.FillEllipse(objBrush,p.X,p.Y+i,pieWidth,pieLenght);
}
//黑色最上面的椭圓
Rectangle rc =new Rectangle(p.X,p.Y,pieWidth,pieLenght);
this.mGraphics.DrawEllipse(PenBlack,rc);

this.mGraphics.DrawLine( PenBlack,p.X,p.Y+pieLenght/2,p.X,p.Y+pieHeight+pieLenght/2);
this.mGraphics.DrawLine( PenBlack,p.X+pieWidth,p.Y+pieLenght/2,p.X+pieWidth,p.Y+pieHeig
ht+pieLenght/2);

}

//求隋圆任意一点x坐标的相对点
//角angle,中心点oPoint,a,长半轴,b,短半轴
public double GetEllipsePX(double angle,int a,int b)
{
//角
double radians = angle * (Math.PI/180);
double px=a*System.Math.Cos(radians) ;
return px;
}

//求隋圆任意一点y坐标的相对点
//角angle,中心点oPoint,a,长半轴,b,短半轴
public double GetEllipsePY(double angle,int a,int b)
{
//角
double radians = angle * (Math.PI/180);
double py=b*System.Math.Sin(radians);
return py;
}


//画线椭圆线
//角angle,中心点oPoint,a,长半轴,b,短半轴
public void DrawEllipseLine(double angle,Point oPoint,int a,int b)
{

int px=System.Convert.ToInt32(GetEllipsePX(angle,a,b))+oPoint.X ;
int py=System.Convert.ToInt32(GetEllipsePY(angle,a,b))+oPoint.Y ;

Pen PenBlack=new Pen( Color.Black);

this.mGraphics.DrawLine( PenBlack,oPoint.X,oPoint.Y,px,py);

//e.Graphics.DrawLine( PenBlack,oPoint.X,oPoint.Y,oPoint.X+b,oPoint.Y);
}
//取扇形的点集(逆时针)
//角angle,已经画过的角FinishAngle,中心点oPoint,长半轴a,短半轴b
public ArrayList GetPicPoints(double angle,double FinishAngle,Point
oPoint,int a,int b)
{
//Point[System.Convert.ToInt32(angle)] curvePoints=new Array() ;
//以步长为1求扇形弧线的坐标点
ArrayList pList=new ArrayList() ;
pList.Add(oPoint);
//pList.Add(ArcStartPoint);

for(int i=0;i {
int px=System.Convert.ToInt32(GetEllipsePX(i+FinishAngle,a,b))+oPoint.X ;
int py=System.Convert.ToInt32(GetEllipsePY(i+FinishAngle,a,b))+oPoint.Y ;
pList.Add(new Point(px,py));
//curvePoints.SetValue(
}
return pList;
}

//画扇形(逆时针)
//角度angle,已经画过的角FinishAngle,中心点oPoint,长半轴a,短半轴b
public void DrawPDAPic(Color color, string text,double angle,double FinishAngle,Point oPoint,int a,int b)
{
// Create solid brush.
SolidBrush Brush = new SolidBrush(color);
ArrayList pList=GetPicPoints(angle,FinishAngle,oPoint,a,b);
Point[] curvePoints=new Point[pList.Count] ;
for(int i=0;i curvePoints[i]=(Point)pList[i];

mGraphics.FillPolygon(Brush, curvePoints);
//画边框
mGraphics.DrawPolygon(this.mBlackPen, curvePoints);
//DrawText(text,Color.Black,this.
}
}
#endregion

[1]  [2]  [3]  [4]  [5]  [6]  
相关文章