画十字参考代码

 肯定要做控件~~你做的重绘闪是没有开双缓冲~
 
关键代码·~~
public   CrossControl()
                         {
                                     InitializeComponent();
                                     this.SetStyle(ControlStyles.SupportsTransparentBackColor,   true);
                                     this.SetStyle(ControlStyles.OptimizedDoubleBuffer   |   ControlStyles.ResizeRedraw   |   ControlStyles.UserPaint,   true);
                                     this.BackColor   =   Color.Transparent;
                         }
                         protected   override   void   OnPaint(PaintEventArgs   e)
                         {
                                     for   (int   i   =   0;   i    <   1000;   i++)
                                     {
                                                 X_Data   =   i   *   0.1;
                                                 Y_Data   =   X_Data   *   X_Data   *   X_Data;
                                     }
                                     
                                     this.DrawCompute();
                                     Bitmap   Bmp   =   new   Bitmap(this.Width,   this.Height);
                                     Graphics   g   =   Graphics.FromImage(Bmp);
                                     g.Clear(this.BackColor);
                                     DrawCross(g);
                                     e.Graphics.DrawImage(Bmp,   new   Point(0,   0));
                                     base.OnPaint(e);
                         }
                         private   void   DrawCross(Graphics   g)
                         {
                                     g.SmoothingMode   =   System.Drawing.Drawing2D.SmoothingMode.HighSpeed;
                                     float   E_X,   E_Y;
                                     E_X   =   MyP.X;
                                     E_Y   =   MyP.Y;
                                     //   T_String=string.Format( "{0}   =   {1}{2},   {3}   ={4}{5} ",   e.X,   e.Y);
                                     float   Data_eX,   Data_eY;
                                     Data_eX   =   Interpolation(0,   Xst,   this.Width-1,   XEnd,   E_X);
                                     Data_eY   =   Interpolation(0,   Yst,   this.Height-1,   YEnd,   E_Y);
                                     Data_eX   =   (int)(Data_eX   *   1000)   /   1000;
                                     Data_eY   =   (int)(Data_eY   *   1000)   /   1000;
                                     float   a,   b;
                                     a   =   Data_eX;
                                     b   =   Data_eY;
                                     T_String   =   string.Format( "横轴   =   {0}(m),   纵轴   ={1}(m) ",   Data_eX,   Data_eY);
                                     SizeF   mysize   =   new   SizeF();
                                     mysize   =   g.MeasureString(T_String,   new   Font( "宋体 ",   12f));
                                     Pen   p   =   new   Pen(Color.Orange,   1);
                                     p.DashStyle   =   DashStyle.DashDot;
                                     g.DrawLine(p,   E_X,   0,   E_X,   this.Height);
                                     g.DrawLine(p,   0,   E_Y,   this.Width,   E_Y);
                                     //判断备注位置
                                     if   (E_X    <=   this.Width   -   10   -   mysize.Width   &&   E_Y    <   mysize.Height   +   10)
                                     {//标注于右下
                                                 g.DrawRectangle(new   Pen(Color.LightSeaGreen,   1),   E_X   +   5,   E_Y+5,   mysize.Width   +   10,   mysize.Height   +   10);
                                                 g.DrawString(T_String,   new   Font( "宋体 ",   12f),   new   SolidBrush(Color.Red),   E_X   +   10,   E_Y+10);
                                     }
                                     else   if   (E_X   >    this.Width   -   10   -   mysize.Width   &&   E_Y    <=   this.Height   -   10   -   mysize.Height)
                                     {//标注于左下
                                                 g.DrawRectangle(new   Pen(Color.LightSeaGreen,   1),   E_X-15-mysize.Width   ,   E_Y   +   5,   mysize.Width   +   10,   mysize.Height   +   10);
                                                 g.DrawString(T_String,   new   Font( "宋体 ",   12f),   new   SolidBrush(Color.Red),   E_X   -   10   -   mysize.Width,   E_Y   +   10);
                                     }
                                     else   if   (E_X   >    this.Width   -   10   -   mysize.Width   &&   E_Y   >    this.Height   -   10   -   mysize.Height)
                                     {//标注于左上
                                                 g.DrawRectangle(new   Pen(Color.LightSeaGreen,   1),   E_X   -   15   -   mysize.Width,   E_Y   -   15-mysize.Height   ,   mysize.Width   +   10,   mysize.Height   +   10);
                                                 g.DrawString(T_String,   new   Font( "宋体 ",   12f),   new   SolidBrush(Color.Red),   E_X   -   10   -   mysize.Width,   E_Y   -   10   -   mysize.Height);
                                     }
                                     else
                                     {//标注于右上
                                     g.DrawRectangle(new   Pen(Color.LightSeaGreen,   1),   E_X   +   5,   E_Y   -   15   -   mysize.Height,   mysize.Width   +   10,   mysize.Height   +   10);
                                     g.DrawString(T_String,   new   Font( "宋体 ",   12f),   new   SolidBrush(Color.Red),   E_X   +   10,   E_Y   -   10   -   mysize.Height);
                                     }
                                     //   this.Refresh();
                                     Invalidate();
                         }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值