none
求一段动态绘制的代码 RRS feed

  • 问题

  • 又来麻烦各位了,想求一段动态绘制的代码,就是在一个picturebox上通过鼠标的拖拽绘制一个虚线矩形框,同时不影响picturebox上显示的图片

    2009年1月4日 4:02

答案

  • 你好!
      这样试试,具体效果你可以自己修改,大体的思路就是这样的,希望对你有帮助:

      using   System;  
      using   System.Collections.Generic;  
      using   System.ComponentModel;  
      using   System.Data;  
      using   System.Drawing;  
      using   System.Text;  
      using   System.Windows.Forms;  
       
      namespace   ControlTest  
      {  
              public   partial   class   Form1   :   Form  
              {  
                      Pen   m_pen   =   new   Pen(Color.Gray,   1);  
                      int   startx   =   0;  
                      int   starty   =   0;  
                      int   endx   =   0;  
                      int   endy   =   0;  
                      bool   isdraw   =   false;  
       
                      public   Form1()  
                      {  
                              InitializeComponent();  
                      }  
       
                      private   void   pictureBox1_MouseDown(object   sender,   MouseEventArgs   e)  
                      {  
                              startx   =   e.X;  
                              starty   =   e.Y;  
                              isdraw   =   true;  
                      }  
       
                      private   void   pictureBox1_MouseMove(object   sender,   MouseEventArgs   e)  
                      {  
                              endx   =   e.X;  
                              endy   =   e.Y;  
                              if   (isdraw)  
                              {  
                                      Refresh();  
                              }  
                      }  
       
                      private   void   pictureBox1_Paint(object   sender,   PaintEventArgs   e)  
                      {  
                              Graphics   g   =   e.Graphics;  
                              if   (isdraw)  
                              {  
       
                                      //设置虚线格式  
                                      m_pen.DashStyle   =   System.Drawing.Drawing2D.DashStyle.Dash;  
       
       
                                      int   width   =   Math.Abs(startx   -   endx);  
                                      int   height   =   Math.Abs(starty   -   endy);  
                                      int   leftupx   =   startx;  
                                      if   (endx   <   startx)  
                                              leftupx   =   endx;  
                                      int   leftupy   =   starty;  
                                      if   (endy   <   starty)  
                                              leftupy   =   endy;  
                                      g.DrawRectangle(m_pen,   leftupx,   leftupy,   width,   height);  
                              }  
                      }  
       
                      private   void   pictureBox1_MouseUp(object   sender,   MouseEventArgs   e)  
                      {  
                              isdraw   =   false;  
                      }  
              }  
      }
    2009年1月4日 4:30
    版主

全部回复

  • 你好!
      这样试试,具体效果你可以自己修改,大体的思路就是这样的,希望对你有帮助:

      using   System;  
      using   System.Collections.Generic;  
      using   System.ComponentModel;  
      using   System.Data;  
      using   System.Drawing;  
      using   System.Text;  
      using   System.Windows.Forms;  
       
      namespace   ControlTest  
      {  
              public   partial   class   Form1   :   Form  
              {  
                      Pen   m_pen   =   new   Pen(Color.Gray,   1);  
                      int   startx   =   0;  
                      int   starty   =   0;  
                      int   endx   =   0;  
                      int   endy   =   0;  
                      bool   isdraw   =   false;  
       
                      public   Form1()  
                      {  
                              InitializeComponent();  
                      }  
       
                      private   void   pictureBox1_MouseDown(object   sender,   MouseEventArgs   e)  
                      {  
                              startx   =   e.X;  
                              starty   =   e.Y;  
                              isdraw   =   true;  
                      }  
       
                      private   void   pictureBox1_MouseMove(object   sender,   MouseEventArgs   e)  
                      {  
                              endx   =   e.X;  
                              endy   =   e.Y;  
                              if   (isdraw)  
                              {  
                                      Refresh();  
                              }  
                      }  
       
                      private   void   pictureBox1_Paint(object   sender,   PaintEventArgs   e)  
                      {  
                              Graphics   g   =   e.Graphics;  
                              if   (isdraw)  
                              {  
       
                                      //设置虚线格式  
                                      m_pen.DashStyle   =   System.Drawing.Drawing2D.DashStyle.Dash;  
       
       
                                      int   width   =   Math.Abs(startx   -   endx);  
                                      int   height   =   Math.Abs(starty   -   endy);  
                                      int   leftupx   =   startx;  
                                      if   (endx   <   startx)  
                                              leftupx   =   endx;  
                                      int   leftupy   =   starty;  
                                      if   (endy   <   starty)  
                                              leftupy   =   endy;  
                                      g.DrawRectangle(m_pen,   leftupx,   leftupy,   width,   height);  
                              }  
                      }  
       
                      private   void   pictureBox1_MouseUp(object   sender,   MouseEventArgs   e)  
                      {  
                              isdraw   =   false;  
                      }  
              }  
      }
    2009年1月4日 4:30
    版主
  • 要的就是这个效果,谢谢周兄(*^__^*)

    2009年1月4日 5:40