我现实现用鼠标选定起点后,移动鼠标自动在平面上画三条平行线,中间一条的起点为鼠标选定点,另外两条可以设定间距后随鼠标移动自动划线,也就是用鼠标在平面任意地方点一下,拖动鼠标就可以画三条平行线,请问怎么实现?

解决方案 »

  1.   

    TO shuchen0829 :   既然easy,请赐教,谢谢!
      

  2.   

    上codeproject上找,先画一条线,然后再根据这一条线,在绘制时画另外两条线。主要是处理鼠标事件.
      

  3.   

    mousedown 的事件.. 再调用三个DrawLine就可以搞定了. 座标点要自己计算一下..
    中间哪条线可以直接获得.其它的两条要跟据一下斜率来算一下座标点..麻烦一些
      

  4.   

    from
    http://blog.sina.com.cn/u/589d32f501000aa3private Point downPoint = Point.Empty; // 鼠标按下的坐标
    private Point movePoint = Point.Empty; // 鼠标移动的坐标
    private double lineSpace = 12.0f; // 线条之间的距离
    private Point offsetPointA = Point.Empty; // 偏移坐标A
    private Point offsetPointB = Point.Empty; // 偏移坐标Bprivate double PointToAngle(Point AOrigin, Point APoint)
    {
        if (APoint.X == AOrigin.X)
            if (APoint.Y > AOrigin.Y)
                return Math.PI * 0.5f;
            else return Math.PI * 1.5f;
        else if (APoint.Y == AOrigin.Y)
            if (APoint.X > AOrigin.X)
                return 0;
            else return Math.PI;
        else
        {
            double Result = Math.Atan((double)(AOrigin.Y - APoint.Y) /
                (AOrigin.X - APoint.X));
            if ((APoint.X < AOrigin.X) && (APoint.Y > AOrigin.Y))
                return Result + Math.PI;
            else if ((APoint.X < AOrigin.X) && (APoint.Y < AOrigin.Y))
                return Result + Math.PI;
            else if ((APoint.X > AOrigin.X) && (APoint.Y < AOrigin.Y))
                return Result + 2.0f * Math.PI;
            else return Result;
        }
    } /* PointToAngle */private void Form1_MouseDown(object sender, MouseEventArgs e)
    {
        downPoint = e.Location;
    }private void Form1_MouseMove(object sender, MouseEventArgs e)
    {
        
        if (downPoint != Point.Empty)
        {
            Graphics vGraphics = CreateGraphics();
            if (movePoint != Point.Empty)
            {
                vGraphics.DrawLine(new Pen(BackColor), offsetPointA,
                    new Point(movePoint.X + offsetPointA.X - downPoint.X,
                    movePoint.Y + offsetPointA.Y - downPoint.Y));
                vGraphics.DrawLine(new Pen(BackColor), offsetPointB,
                    new Point(movePoint.X + offsetPointB.X - downPoint.X,
                    movePoint.Y + offsetPointB.Y - downPoint.Y));
                vGraphics.DrawLine(new Pen(BackColor), downPoint, movePoint);
            }
            movePoint = e.Location;
            double angle = PointToAngle(downPoint, movePoint);
            offsetPointA.X = (int)(Math.Cos(angle + 0.5f * Math.PI) * lineSpace + 
                downPoint.X);
            offsetPointA.Y = (int)(Math.Sin(angle + 0.5f * Math.PI) * lineSpace + 
                downPoint.Y);
            offsetPointB.X = (int)(Math.Cos(angle - 0.5f * Math.PI) * lineSpace + 
                downPoint.X);
            offsetPointB.Y = (int)(Math.Sin(angle - 0.5f * Math.PI) * lineSpace + 
                downPoint.Y);
            
            vGraphics.DrawLine(Pens.Red, offsetPointA, 
                new Point(movePoint.X + offsetPointA.X - downPoint.X,
                movePoint.Y + offsetPointA.Y - downPoint.Y));
            vGraphics.DrawLine(Pens.Red, offsetPointB,
                new Point(movePoint.X + offsetPointB.X - downPoint.X,
                movePoint.Y + offsetPointB.Y - downPoint.Y));        vGraphics.DrawLine(Pens.Blue, downPoint, movePoint);
            vGraphics.Dispose();
        }
    }private void Form1_MouseUp(object sender, MouseEventArgs e)
    {
        downPoint = Point.Empty;
    }
      

  5.   

    感谢各位,zswang(伴水清清)的方法可行!