如果您知道形状的方程式,您可以计算鼠标是在形状区域内还是在形状区域外。请注意,如果形状由几何方程相对简单的直线或圆(椭圆)组成,这很容易。例如,如果您的形状是具有 x 和 y 坐标 (10,10)、(50,10) 和 (30,50) 的三角形,那么您应该使用两点的直线方程推导出直线方程:
y-y1 = ((y2-y1)/(x2-x1))*(x-x1)
我们三角形的直线方程将是:
y=1
y=2*x-10
y=-2*x+110
我们应该在某个画布上绘制那个三角形,比如说在PictureBox
带FixedSingle
边框上。添加Paint
事件处理程序
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
Point[] p = new Point[3];
p[0] = new Point(10,10);
p[1] = new Point(50,10);
p[2] = new Point(30,50);
e.Graphics.DrawLines(Pens.Black, p);
e.Graphics.FillPolygon(Brushes.Red, p);
}
我们应该MouseMove
为PictureBox
bool inside = false;
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
if (e.Y > 10 && e.Y < 2 * e.X - 10 && e.Y < -2 * e.X + 110)
{
if (!inside)
{
inside = true;
HandleMouseEnter();
}
}
else
inside = false;
}
void HandleMouseEnter()
{
MessageBox.Show("Mouse inside");
}
在if
声明鼠标光标是否在三角形内(注意C#中的坐标原点在左上角但它与真实几何相似)。HandleMouseEnter
是处理鼠标进入的方法。
您可以对任意形状使用类似的方法,但您应该有描述它的几何方程。