我做了一个矩形,如何检查鼠标是否点击了它



如何检查鼠标是否单击了矩形?

Graphics gfx;
Rectangle hitbox;
hitbox = new hitbox(50,50,10,10);
//TIMER AT THE BOTTOM
gfx.Draw(System.Drawing.Pens.Black,hitbox);

只是一个快速而肮脏的样本,如果你的"gfx"是一个"e.Graphics..."从表单:

  public partial class Form1 : Form
  {
    private readonly Rectangle hitbox = new Rectangle(50, 50, 10, 10);
    private readonly Pen pen = new Pen(Brushes.Black);
    public Form1()
    {
      InitializeComponent();
    }
    private void Form1_Paint(object sender, PaintEventArgs e)
    {
      e.Graphics.DrawRectangle(pen, hitbox);
    }
    private void Form1_MouseDown(object sender, MouseEventArgs e)
    {
      if ((e.X > hitbox.X) && (e.X < hitbox.X + hitbox.Width) &&
          (e.Y > hitbox.Y) && (e.Y < hitbox.Y + hitbox.Height))
      {
        Text = "HIT";
      }
      else
      {
        Text = "NO";
      }
    }
  }

矩形有几个方便但经常被忽视的功能。在这种情况下,使用 Rectangle.Contains(Point) 函数是最佳解决方案:

private void Form1_MouseDown(object sender, MouseEventArgs e)
{
    if (hitbox.Contains(e.Location)) ..  // clicked inside
}

要确定您是否单击了轮廓,您需要确定宽度,因为用户无法轻松点击单个像素。

为此,您可以使用任一GraphicsPath.IsOutlineVisible(Point)..

private void Form1_MouseDown(object sender, MouseEventArgs e)
{
    GraphicsPath gp = new GraphicsPath();
    gp.AddRectanle(hitbox);
    using (Pen pen = new Pen(Color.Black, 2f))
      if (gp.IsOutlineVisible(e.location), pen)  ..  // clicked on outline 
}

..或坚持矩形..:

private void Form1_MouseDown(object sender, MouseEventArgs e)
{
    Rectangle inner = hitbox;
    Rectangle outer = hitbox;
    inner.Inflate(-1, -1);  // a two pixel
    outer.Inflate(1, 1);    // ..outline
    if (outer.Contains(e.Location) && !innerContains(e.Location)) .. // clicked on outline
}

相关内容

  • 没有找到相关文章

最新更新