17.C#编程学习—— 贝塞尔曲线
源码
usingSystem;
usingSystem.Drawing;
usingSystem.Windows.Forms;
classBezier : Form
{
protectedPoint[] apt = newPoint[4];
publicstaticvoid Main()
{
Application.Run(newBezier());
}
public Bezier()
{
Text = "Bezier (Mouse Defines Control Points)";
BackColor = SystemColors.Window;
ForeColor = SystemColors.WindowText;
ResizeRedraw = true;
OnResize(EventArgs.Empty);
}
protectedoverridevoid OnResize(EventArgs ea)
{
base.OnResize(ea);
int cx = ClientSize.Width;
int cy = ClientSize.Height;
apt[0] = newPoint(cx / 4, cy / 2);
apt[1] = newPoint(cx / 2, cy / 4);
apt[2] = newPoint(cx / 2, 3 * cy / 4);
apt[3] = newPoint(3 * cx / 4, cy / 2);
}
protectedoverridevoid OnMouseDown(MouseEventArgs mea)
{
Point pt;
if (mea.Button == MouseButtons.Left)
pt = apt[1];
elseif (mea.Button == MouseButtons.Right)
pt = apt[2];
else
return;
Cursor.Position = PointToScreen(pt);
}
protectedoverridevoid OnMouseMove(MouseEventArgs mea)
{
if (mea.Button == MouseButtons.Left)
{
apt[1] = newPoint(mea.X, mea.Y);
Invalidate();
}
elseif (mea.Button == MouseButtons.Right)
{
apt[2] = newPoint(mea.X, mea.Y);
Invalidate();
}
}
protectedoverridevoid OnPaint(PaintEventArgs pea)
{
Graphics grfx = pea.Graphics;
grfx.DrawBeziers(newPen(ForeColor),apt);
Pen pen = newPen(Color.FromArgb(0x80, ForeColor));
grfx.DrawLine(pen, apt[0], apt[1]);
grfx.DrawLine(pen, apt[2], apt[3]);
}
}