.net绘制实时曲线之仪表显示

 

 

 

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace DrawMeter
{
    public partial class DrawMeter : UserControl
    {
        #region 构造函数
        public DrawMeter()
        {
            InitializeComponent();
            if (pnlMeter.Height != pnlMeter.Width)
            {
                if (pnlMeter.Height > pnlMeter.Width)
                    this.Width += pnlMeter.Height - pnlMeter.Width;
                else
                    this.Height += pnlMeter.Width - pnlMeter.Height;
            }
            DrawBackGroundImage();
        }
        #endregion
                
        #region   相关属性设置
        private float fltMaxData = 55.5F;
        /// <summary>
        /// 仪表度数最大值
        /// </summary>
        public float My_MeterData
        {
            get { return fltMaxData; }
            set
            {
                fltMaxData = value;
                DrawBackGroundImage();
            }
        }

        private string strMeterSingle = "PPT";
        /// <summary>
        /// 仪表标志
        /// </summary>
        public string My_MeterSingle
        {
            get { return strMeterSingle; }
            set { strMeterSingle = value; }
        }

        private float fltRealTimeData = 0F;
        /// <summary>
        /// 实时数据
        /// </summary>
        public float My_RealTimeData
        {
            get { return fltRealTimeData; }
            set
            {
                fltRealTimeData = value;
                SetData(fltRealTimeData.ToString());
                //DrawMeterIndex();
                Invalidate();
            }
        }

        private string strTitle = "";
        /// <summary>
        /// 控件标题
        /// </summary>
        public string My_Title
        {
            get { return strTitle; }
            set
            {
                strTitle = value;
                lblTitle.Text = strTitle;
            }
        }
        #endregion

        #region   私有变量
        private const double dblAngleRadianModulus = 3.14159265358 / 180;
        private PointF[] ptfSingle = new PointF[11];
        private PointF ptff = new PointF(0, 0);
        private delegate void  SetRealTimeData(string strRealTimeData);

        private delegate Point SetPoint(Point pt);
        private delegate void SetImageToPic(Image img1);//委托方法
        //private bool isInvilidate = false;
        #endregion

        #region 私有方法
        #region 画背景图片
        private void DrawBackGroundImage()
        {
            try
            {
                ptff = new PointF(pnlMeter.Width / 2F, pnlMeter.Width / 2F);
                PointF ptf = new PointF();
                //pnlMeter.BackgroundImage = null;
                Image img = new Bitmap(pnlMeter.Width, pnlMeter.Height);
                //using (Graphics g = Graphics.FromImage(img))
                using (Graphics g = pnlMeter.CreateGraphics())
                {
                    lock (g)
                    {
                        g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
                        //g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;

                        g.FillEllipse(Brushes.White, new Rectangle(0, 0, pnlMeter.Height, pnlMeter.Height));
                        g.DrawEllipse(new Pen(Brushes.Black), new RectangleF(pnlMeter.Height / 2F - 8, pnlMeter.Height / 2F - 8, 16F, 16F));
                        g.FillEllipse(Brushes.Black, new RectangleF(pnlMeter.Height / 2F - 8, pnlMeter.Height / 2F - 8, 16F, 16F));

                        double dblInceptAngle = 210; //起始角度
                        for (int i = 1; i < 101; i++)
                        {
                            if (i == 1)//画长刻度
                            {
                                PointF ptx = new PointF(pnlMeter.Width / 2F - (pnlMeter.Height - 20) / 2F * (float)Math.Sin((dblInceptAngle + i * 3) * dblAngleRadianModulus), pnlMeter.Width / 2F - (pnlMeter.Height - 20) / 2F * (float)Math.Cos((dblInceptAngle + i * 3) * dblAngleRadianModulus));
                                PointF pty = new PointF(pnlM

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值