您如何允许用户通过鼠标与图形对象进行交互?

时间:2009-09-18 17:18:26

标签: .net user-interface graphics charts gdi+

我正在处理的应用程序将用于创建数据库中包含的数据图表。现在,图表上的对象使用“控制面板”进行操作 - 基本上是对象列表和用于编辑值的PropertyGrid。用户还希望能够使用鼠标交互与对象进行交互 - 例如抓住图表的一角并拖动以展开/收缩它,单击数字并获取文本框进行编辑,或者右键单击获得可能的互动菜单的东西。 图表是在元文件(一个要求)上使用GDI +绘制的,然后在用户绘制的表单上绘制。

我不确定如何实现这一点。我有几个想法:

  • 创建一些覆盖在图表图形上的自定义控件。每个控件都可以与图表上对象的特定对象或属性相关联,并根据用户与其进行交互的方式更新这些值。
  • 只需跟踪对象的位置,当用户使用鼠标执行某些操作时,请浏览列表并找出应该位于鼠标位置的对象,然后从那里开始。

我对你们如何实现这一点感兴趣,并且非常感谢一些建议。谢谢!

4 个答案:

答案 0 :(得分:2)

后者 - 例如,如果它是一个饼图,你将不得不做大部分的命中测试工作,以处理不规则形状的控件。

答案 1 :(得分:1)

一种很好的点击检测方法:有另一个屏幕外图像。使用唯一颜色在此图像上绘制每个可单击对象。您必须禁用抗锯齿。当用户单击从屏幕外图像获取该点的颜色并确定对象时。如果您有对象列表,则可以使用对象索引作为颜色。此方法将处理不规则形状对象的命中检测,但速度会慢一些。

PS。使用控件会慢于此。

答案 2 :(得分:0)

最简单:拥有一个对象列表及其边界框。当鼠标事件发生时,检查单击哪个对象的列表。

答案 3 :(得分:0)

前者 - 如果你将它覆盖在一个表单上,那么所有的命中测试都将由表单框架为你完成。您只需创建一些控件,然后为它们实现事件处理程序。

以上还描述了任何Windows窗体(或者可能是MPF)程序:)

创建自己的对象列表等等于重新实现Windows窗体框架,或者至少是其中很大一部分。您不想重新发明轮子,特别是因为您的应用程序中已经有轮子。