用GDI+划直线

来源:互联网 发布:kitti数据集介绍 编辑:程序博客网 时间:2024/03/29 19:01

下面是代码,很容易看懂的,没有必要进行解释了吧。:)

 

using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using System.Windows.Forms;


    
public class Line : System.Windows.Forms.UserControl
    
{
        
/// <summary> 
        
/// Required designer variable.
        
/// </summary>

        private System.ComponentModel.Container components = null;

        
public Line()
        
{
            
// This call is required by the Windows.Forms Form Designer.
            InitializeComponent();

            SetStyle(ControlStyles.AllPaintingInWmPaint 
| ControlStyles.UserPaint | ControlStyles.FixedHeight | ControlStyles.FixedWidth | ControlStyles.ResizeRedraw, true);
            SetStyle(ControlStyles.Selectable, 
false);
            TabStop 
= false;
        }


        
/// <summary> 
        
/// Clean up any resources being used.
        
/// </summary>

        protected override void Dispose(bool disposing)
        
{
            
if (disposing)
            
{
                
if (components != null)
                
{
                    components.Dispose();
                }

            }

            
base.Dispose(disposing);
        }


        
Component Designer generated code

        
protected override void OnPaint(PaintEventArgs e)
        
{
            
base.OnPaint(e);

            
int x1, x2, x3, x4, y1, y2, y3, y4;
            
if (LineStyle == LineStyle.Horizontal)
            
{
                x1 
= 0;
                y1 
= 0;
                x2 
= ClientRectangle.Width;
                y2 
= 0;

                x3 
= 0;
                y3 
= 1;
                x4 
= ClientRectangle.Width;
                y4 
= 1;
            }

            
else //if (LineStyle == LineStyle.Vertical)
            {
                x1 
= 0;
                y1 
= 0;
                x2 
= 0;
                y2 
= ClientRectangle.Height;

                x3 
= 1;
                y3 
= 0;
                x4 
= 1;
                y4 
= ClientRectangle.Height;
            }


            
using (Pen p = new Pen(m_FirstColor, 1))
            
{
                p.DashStyle 
= mDashStyle;
                e.Graphics.DrawLine(p, x1, y1, x2, y2);
            }

            
using (Pen p = new Pen(m_SecondColor, 1))
            
{
                p.DashStyle 
= mDashStyle;
                e.Graphics.DrawLine(p, x3, y3, x4, y4);
            }

        }


        
private System.Drawing.Drawing2D.DashStyle mDashStyle = System.Drawing.Drawing2D.DashStyle.Solid;
        
public System.Drawing.Drawing2D.DashStyle DashStyle
        
{
            
get return mDashStyle; }
            
set { mDashStyle = value; Invalidate(); }
        }


        
private Color m_FirstColor = Color.FromKnownColor(KnownColor.ControlDark);
        
public Color FirstColor
        
{
            
get return m_FirstColor; }
            
set { m_FirstColor = value; Invalidate(); }
        }


        
private Color m_SecondColor = Color.FromKnownColor(KnownColor.ControlLightLight);
        
public Color SecondColor
        
{
            
get return m_SecondColor; }
            
set { m_SecondColor = value; Invalidate(); }
        }


        
private LineStyle m_LineStyle = LineStyle.Horizontal;
        
public LineStyle LineStyle
        
{
            
get return m_LineStyle; }
            
set
            
{
                m_LineStyle 
= value;
                Size 
= new Size(Height, Width);
                Invalidate();
            }

        }


        
protected override void OnSizeChanged(EventArgs e)
        
{
            
base.OnSizeChanged(e);

            ChangeControlSize();
        }


        
private void ChangeControlSize()
        
{
            
if (LineStyle == LineStyle.Horizontal)
                Height 
= 2;
            
else if (LineStyle == LineStyle.Vertical)
                Width 
= 2;
        }

    }


    
public enum LineStyle
    
{
        Horizontal 
= 1,
        Vertical 
= 2
    }