日期:2014-05-19  浏览次数:20998 次

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

------解决方案--------------------
from
http://blog.sina.com.cn/u/589d32f501000aa3

private 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; // 偏移坐标B

private 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;
}