注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

信息 灵感 创新

I? =Information,Inspiration,Innovation

 
 
 

日志

 
 
关于我

we are 5. Mathematics, Computation, Programming, Engineering, and Making fun of life.

网易考拉推荐

C#七段码管控件  

2013-05-25 10:36:41|  分类: C# & .NET |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
直接上代码,感兴趣的同学自己去研究,采用了多边形绘制所显示的数码管。
using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;

namespace SevenSegmentLED
{
   public class SevenSegmentLED : UserControl
   {
       public SevenSegmentLED()
       {
           this.SuspendLayout();
           this.Name = "SevenSegment";
           this.Size = new System.Drawing.Size(32, 64);
           this.Paint += new System.Windows.Forms.PaintEventHandler(this.SevenSegment_Paint);
           this.Resize += new System.EventHandler(this.SevenSegment_Resize);
           this.ResumeLayout(false);
           this.TabStop = false;
           this.Padding = new Padding(4, 4, 4, 4);
           this.DoubleBuffered = true;
           segPoints = new Point[7][];
           for (int i = 0; i < 7; i++) segPoints[i] = new Point[6];
           RecalculatePoints();
       }

       /// <summary>
       /// 重新计算多边形的边
       /// </summary>
       private void RecalculatePoints()
       {
           int halfHeight = gridHeight / 2, halfWidth = elementWidth / 2;
           int p = 0;
           segPoints[p][0].X = elementWidth + 1; segPoints[p][0].Y = 0;
           segPoints[p][1].X = gridWidth - elementWidth - 1; segPoints[p][1].Y = 0;
           segPoints[p][2].X = gridWidth - halfWidth - 1; segPoints[p][2].Y = halfWidth;
           segPoints[p][3].X = gridWidth - elementWidth - 1; segPoints[p][3].Y = elementWidth;
           segPoints[p][4].X = elementWidth + 1; segPoints[p][4].Y = elementWidth;
           segPoints[p][5].X = halfWidth + 1; segPoints[p][5].Y = halfWidth;

           p++;
           segPoints[p][0].X = 0; segPoints[p][0].Y = elementWidth + 1;
           segPoints[p][1].X = halfWidth; segPoints[p][1].Y = halfWidth + 1;
           segPoints[p][2].X = elementWidth; segPoints[p][2].Y = elementWidth + 1;
           segPoints[p][3].X = elementWidth; segPoints[p][3].Y = halfHeight - halfWidth - 1;
           segPoints[p][4].X = 4; segPoints[p][4].Y = halfHeight - 1;
           segPoints[p][5].X = 0; segPoints[p][5].Y = halfHeight - 1;

           p++;
           segPoints[p][0].X = gridWidth - elementWidth; segPoints[p][0].Y = elementWidth + 1;
           segPoints[p][1].X = gridWidth - halfWidth; segPoints[p][1].Y = halfWidth + 1;
           segPoints[p][2].X = gridWidth; segPoints[p][2].Y = elementWidth + 1;
           segPoints[p][3].X = gridWidth; segPoints[p][3].Y = halfHeight - 1;
           segPoints[p][4].X = gridWidth - 4; segPoints[p][4].Y = halfHeight - 1;
           segPoints[p][5].X = gridWidth - elementWidth; segPoints[p][5].Y = halfHeight - halfWidth - 1;

           p++;
           segPoints[p][0].X = elementWidth + 1; segPoints[p][0].Y = halfHeight - halfWidth;
           segPoints[p][1].X = gridWidth - elementWidth - 1; segPoints[p][1].Y = halfHeight - halfWidth;
           segPoints[p][2].X = gridWidth - 5; segPoints[p][2].Y = halfHeight;
           segPoints[p][3].X = gridWidth - elementWidth - 1; segPoints[p][3].Y = halfHeight + halfWidth;
           segPoints[p][4].X = elementWidth + 1; segPoints[p][4].Y = halfHeight + halfWidth;
           segPoints[p][5].X = 5; segPoints[p][5].Y = halfHeight;

           p++;
           segPoints[p][0].X = 0; segPoints[p][0].Y = halfHeight + 1;
           segPoints[p][1].X = 4; segPoints[p][1].Y = halfHeight + 1;
           segPoints[p][2].X = elementWidth; segPoints[p][2].Y = halfHeight + halfWidth + 1;
           segPoints[p][3].X = elementWidth; segPoints[p][3].Y = gridHeight - elementWidth - 1;
           segPoints[p][4].X = halfWidth; segPoints[p][4].Y = gridHeight - halfWidth - 1;
           segPoints[p][5].X = 0; segPoints[p][5].Y = gridHeight - elementWidth - 1;

           p++;
           segPoints[p][0].X = gridWidth - elementWidth; segPoints[p][0].Y = halfHeight + halfWidth + 1;
           segPoints[p][1].X = gridWidth - 4; segPoints[p][1].Y = halfHeight + 1;
           segPoints[p][2].X = gridWidth; segPoints[p][2].Y = halfHeight + 1;
           segPoints[p][3].X = gridWidth; segPoints[p][3].Y = gridHeight - elementWidth - 1;
           segPoints[p][4].X = gridWidth - halfWidth; segPoints[p][4].Y = gridHeight - halfWidth - 1;
           segPoints[p][5].X = gridWidth - elementWidth; segPoints[p][5].Y = gridHeight - elementWidth - 1;

           p++;
           segPoints[p][0].X = elementWidth + 1; segPoints[p][0].Y = gridHeight - elementWidth;
           segPoints[p][1].X = gridWidth - elementWidth - 1; segPoints[p][1].Y = gridHeight - elementWidth;
           segPoints[p][2].X = gridWidth - halfWidth - 1; segPoints[p][2].Y = gridHeight - halfWidth;
           segPoints[p][3].X = gridWidth - elementWidth - 1; segPoints[p][3].Y = gridHeight;
           segPoints[p][4].X = elementWidth + 1; segPoints[p][4].Y = gridHeight;
           segPoints[p][5].X = halfWidth + 1; segPoints[p][5].Y = gridHeight - halfWidth;
       }

       private Point[][] segPoints;
       private int gridHeight = 80;
       private int gridWidth = 48;
       private int elementWidth = 10;
       private float italicFactor = 0.0F;
       private Color colorBackground = Color.DarkGray;
       private Color colorDark = Color.DimGray;
       private Color colorLight = Color.Red;

       /// <summary>
       /// 背景色
       /// </summary>
       public Color ColorBackground
       {
           get
           {
               return colorBackground;
           }
           set
           {
               colorBackground = value;
               Invalidate();
           }
       }
       /// <summary>
       /// 非点亮颜色
       /// </summary>
       public Color ColorDark
       {
           get
           {
               return colorDark;
           }
           set
           {
               colorDark = value;
               Invalidate();
           }
       }
       /// <summary>
       /// 被点亮颜色
       /// </summary>
       public Color ColorLight
       {
           get
           {
               return colorLight;
           }
           set
           {
               colorLight = value;
               Invalidate();
           }
       }

       /// <summary>
       /// 灯管宽度
       /// </summary>
       public int ElementWidth
       {
           get
           {
               return elementWidth;
           }
           set
           {
               elementWidth = value;
               RecalculatePoints();
               Invalidate();
           }
       }
       /// <summary>
       /// 倾斜率
       /// </summary>
       public float ItalicFactor
       {
           get
           {
               return italicFactor;
           }
           set
           {
               italicFactor = value;
               Invalidate();
           }
       }
       private void SevenSegment_Resize(object sender, EventArgs e)
       {
           this.Invalidate();
       }
       protected override void OnPaddingChanged(EventArgs e)
       {
           base.OnPaddingChanged(e);
           this.Invalidate();
       }

       protected override void OnPaintBackground(PaintEventArgs e)
       {
           e.Graphics.Clear(colorBackground);
       }

       public enum ValuePattern
       {
           None = 0x0, Zero = 0x77, One = 0x24, Two = 0x5D, Three = 0x6D,
           Four = 0x2E, Five = 0x6B, Six = 0x7B, Seven = 0x25,
           Eight = 0x7F, Nine = 0x6F, A = 0x3F, B = 0x7A, C = 0x53,
           D = 0x7C, E = 0x5B, F = 0x1B, G = 0x73, H = 0x3E,
           J = 0x74, L = 0x52, N = 0x38, O = 0x78, P = 0x1F, Q = 0x2F, R = 0x18,
           T = 0x5A, U = 0x76, Y = 0x6E,
           Dash = 0x8, Equals = 0x48
       }

       private string theValue = null;
       public string Value
       {
           get
           {
               return theValue;
           }
           set
           {
               customPattern = 0;
               if (value != null)
               {
                   //is it an integer?
                   bool success = false;
                   try
                   {
                       int tempValue = Convert.ToInt32(value);
                       if (tempValue > 9) tempValue = 9;
                       if (tempValue < 0) tempValue = 0;
                       switch (tempValue)
                       {
                           case 0: customPattern = (int)ValuePattern.Zero; break;
                           case 1: customPattern = (int)ValuePattern.One; break;
                           case 2: customPattern = (int)ValuePattern.Two; break;
                           case 3: customPattern = (int)ValuePattern.Three; break;
                           case 4: customPattern = (int)ValuePattern.Four; break;
                           case 5: customPattern = (int)ValuePattern.Five; break;
                           case 6: customPattern = (int)ValuePattern.Six; break;
                           case 7: customPattern = (int)ValuePattern.Seven; break;
                           case 8: customPattern = (int)ValuePattern.Eight; break;
                           case 9: customPattern = (int)ValuePattern.Nine; break;
                       }
                       success = true;
                   }
                   catch { }
                   if (!success)
                   {
                       try
                       {
                           string tempString = Convert.ToString(value);
                           switch (tempString.ToLower()[0])
                           {
                               case 'a': customPattern = (int)ValuePattern.A; break;
                               case 'b': customPattern = (int)ValuePattern.B; break;
                               case 'c': customPattern = (int)ValuePattern.C; break;
                               case 'd': customPattern = (int)ValuePattern.D; break;
                               case 'e': customPattern = (int)ValuePattern.E; break;
                               case 'f': customPattern = (int)ValuePattern.F; break;
                               case 'g': customPattern = (int)ValuePattern.G; break;
                               case 'h': customPattern = (int)ValuePattern.H; break;
                               case 'j': customPattern = (int)ValuePattern.J; break;
                               case 'l': customPattern = (int)ValuePattern.L; break;
                               case 'n': customPattern = (int)ValuePattern.N; break;
                               case 'o': customPattern = (int)ValuePattern.O; break;
                               case 'p': customPattern = (int)ValuePattern.P; break;
                               case 'q': customPattern = (int)ValuePattern.Q; break;
                               case 'r': customPattern = (int)ValuePattern.R; break;
                               case 't': customPattern = (int)ValuePattern.T; break;
                               case 'u': customPattern = (int)ValuePattern.U; break;
                               case 'y': customPattern = (int)ValuePattern.Y; break;
                               case '-': customPattern = (int)ValuePattern.Dash; break;
                               case '=': customPattern = (int)ValuePattern.Equals; break;
                           }
                       }
                       catch { }
                   }
               }
               theValue = value; Invalidate();
           }
       }

       private int customPattern = 0;
       public int CustomPattern
       { 
          get
          {
               return customPattern;
          }
           set
           {
               customPattern = value;
               Invalidate();
           }
       }

       private bool showDot = true, dotOn = false;

       public bool DecimalShow
       {
           get
           {
               return showDot;
           }
           set
           {
               showDot = value;
               Invalidate();
           }
       }

       public bool DecimalOn
       {
           get
           {
               return dotOn;
           }
           set
           {
               dotOn = value;
               Invalidate();
           }
       }

       private void SevenSegment_Paint(object sender, PaintEventArgs e)
       {
           int useValue = customPattern;
           Brush brushLight = new SolidBrush(colorLight);
           Brush brushDark = new SolidBrush(colorDark);
           RectangleF srcRect = new RectangleF(0.0F, 0.0F, gridWidth, gridHeight);
           RectangleF destRect = new RectangleF(Padding.Left, Padding.Top, this.Width - Padding.Left - Padding.Right, this.Height - Padding.Top - Padding.Bottom);
           GraphicsContainer containerState = e.Graphics.BeginContainer(destRect, srcRect, GraphicsUnit.Pixel);
           Matrix trans = new Matrix();
           trans.Shear(italicFactor, 0.0F);
           e.Graphics.Transform = trans;
           e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
           e.Graphics.PixelOffsetMode = PixelOffsetMode.Default;
           e.Graphics.FillPolygon((useValue & 0x1) == 0x1 ? brushLight : brushDark, segPoints[0]);
           e.Graphics.FillPolygon((useValue & 0x2) == 0x2 ? brushLight : brushDark, segPoints[1]);
           e.Graphics.FillPolygon((useValue & 0x4) == 0x4 ? brushLight : brushDark, segPoints[2]);
           e.Graphics.FillPolygon((useValue & 0x8) == 0x8 ? brushLight : brushDark, segPoints[3]);
           e.Graphics.FillPolygon((useValue & 0x10) == 0x10 ? brushLight : brushDark, segPoints[4]);
           e.Graphics.FillPolygon((useValue & 0x20) == 0x20 ? brushLight : brushDark, segPoints[5]);
           e.Graphics.FillPolygon((useValue & 0x40) == 0x40 ? brushLight : brushDark, segPoints[6]);
           if (showDot)
               e.Graphics.FillEllipse(dotOn ? brushLight : brushDark, gridWidth - 1, gridHeight - elementWidth + 1, elementWidth, elementWidth);
           e.Graphics.EndContainer(containerState);
       }
   }
}
再来个测试的窗口:
C七段码管控件 - Lemniscate - 一亩三分地
 
  评论这张
 
阅读(1296)| 评论(2)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016