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

在C#中如何实现蚂蚁线啊!多谢!
在C#中如何实现蚂蚁线啊!多谢!
求高手详细说明一下,我是C#新手


------解决方案--------------------
ControlPaint.DrawReversibleFrame 方法
在屏幕上的指定边界内,按指定背景色绘制处于指定状态的可逆框架。

public static void DrawReversibleFrame (
Rectangle rectangle,
Color backColor,
FrameStyle style
)

参数
rectangle
代表要绘制矩形的尺寸的 Rectangle(采用屏幕坐标)。

backColor
框架的背景的 Color。

style
FrameStyle 值之一,它指定框架的样式。
    Dashed 细虚线边框。
    Thick 粗实线边框。

下面的代码示例阐释了如何使用 FrameStyle 枚举。要运行该示例,请将以下代码粘贴到一个名为 Form1 的包含多个控件的窗体中。此示例假定将 MouseDown、MouseMove 和 MouseUp 事件连接到该示例中定义的事件处理程序方法。

// The following three methods will draw a rectangle and allow
// the user to use the mouse to resize the rectangle. If the
// rectangle intersects a control 's client rectangle, the
// control 's color will change.

bool isDrag = false;
Rectangle theRectangle = new Rectangle
(new Point(0, 0), new Size(0, 0));
Point startPoint;

private void Form1_MouseDown(object sender,
System.Windows.Forms.MouseEventArgs e)
{

// Set the isDrag variable to true and get the starting point
// by using the PointToScreen method to convert form
// coordinates to screen coordinates.
if (e.Button==MouseButtons.Left)
{
isDrag = true;
}

Control control = (Control) sender;

// Calculate the startPoint by using the PointToScreen
// method.
startPoint = control.PointToScreen(new Point(e.X, e.Y));
}

private void Form1_MouseMove(object sender,
System.Windows.Forms.MouseEventArgs e)
{

// If the mouse is being dragged,
// undraw and redraw the rectangle as the mouse moves.
if (isDrag)

// Hide the previous rectangle by calling the
// DrawReversibleFrame method with the same parameters.
{
ControlPaint.DrawReversibleFrame(theRectangle,
this.BackColor, FrameStyle.Dashed);

// Calculate the endpoint and dimensions for the new
// rectangle, again using the PointToScreen method.
Point endPoint = this.PointToScreen(new Point(e.X, e.Y));
int width = endPoint.X-startPoint.X;
int height = endPoint.Y-startPoint.Y;
theRectangle = new Rectangle(startPoint.X,
startPoint.Y, width, height);

// Draw the new rectangle by calling DrawReversibleFrame
// again.
ControlPaint.DrawReversibleFrame(theRectangle,
this.BackColor, FrameStyle.Dashed);
}
}

private void Form1_MouseUp(object sender,
System.Windows.Forms.MouseEventArgs e)
{

// If the MouseUp event occurs, the user is not dragging.
isDrag = false;

// Draw the rectangle to be evaluated. Set a dashed frame style
// using the FrameStyle enumeration.
ControlPaint.DrawReversibleFrame(theRectangle,
this.BackColor, FrameStyle.Dashed);

// Find out which controls intersect the rectangle and
// change their color. The method uses the RectangleToScreen
// method to convert the Control 's client coordinates
// to screen coordinates.
Rectangle controlRectangle;
for(int i = 0; i < Controls.Count; i++)
{
controlRectangle = Controls[i].RectangleToScreen
(Controls[i].ClientRectangle);
if (controlRectangle.IntersectsWith(th