【发布时间】:2014-05-03 10:41:05
【问题描述】:
我需要为我的 Windows 窗体控件实现命中测试。我有我的自定义类,它继承了 Control 类,我在 OnPaint 方法中绘制了一条折线:
e.Graphics.DrawLines(myPen, myPoints);
现在,在MouseDown 事件期间,我获得了鼠标的位置,并实现了如下的命中测试:
using (var path = new GraphicsPath())
{
path.AddLines(myPoints);
return path.IsVisible(pt);
}
问题是,如果有,例如,图中的折线(可能看起来像一个多边形)IsVisible 方法返回 true,即使我在代表这个多边形的区域内单击:
我需要不同的行为,只有当我点击该行时,该方法才必须返回 true。 我该怎么办?
【问题讨论】:
-
一个更好的解决方案是创建一个对象/一个 model 来代表你想要的形式,它会自己绘制。然后对象将负责检查它是否被击中(在哪个区域)而不是主程序。在主应用程序中,您只需为要检查的每个对象传递鼠标坐标。
-
@pasty 谢谢你的建议,实际上我正在按照你说的做。这个问题只是一个更简单的例子。
-
@Nick 正如我在answer 中发布的那样,您只需将
IsVisible替换为IsOutlineVisible。
标签: c# winforms graphics gdi+ hittest