我正在处理的应用程序将用于创建数据库中包含的数据图表。现在,图表上的对象使用“控制面板”进行操作 - 基本上是对象列表和用于编辑值的PropertyGrid。用户还希望能够使用鼠标交互与对象进行交互 - 例如抓住图表的一角并拖动以展开/收缩它,单击数字并获取文本框进行编辑,或者右键单击获得可能的互动菜单的东西。 图表是在元文件(一个要求)上使用GDI +绘制的,然后在用户绘制的表单上绘制。
我不确定如何实现这一点。我有几个想法:
我对你们如何实现这一点感兴趣,并且非常感谢一些建议。谢谢!
答案 0 :(得分:2)
后者 - 例如,如果它是一个饼图,你将不得不做大部分的命中测试工作,以处理不规则形状的控件。
答案 1 :(得分:1)
一种很好的点击检测方法:有另一个屏幕外图像。使用唯一颜色在此图像上绘制每个可单击对象。您必须禁用抗锯齿。当用户单击从屏幕外图像获取该点的颜色并确定对象时。如果您有对象列表,则可以使用对象索引作为颜色。此方法将处理不规则形状对象的命中检测,但速度会慢一些。
PS。使用控件会慢于此。
答案 2 :(得分:0)
最简单:拥有一个对象列表及其边界框。当鼠标事件发生时,检查单击哪个对象的列表。
答案 3 :(得分:0)
前者 - 如果你将它覆盖在一个表单上,那么所有的命中测试都将由表单框架为你完成。您只需创建一些控件,然后为它们实现事件处理程序。
以上还描述了任何Windows窗体(或者可能是MPF)程序:)
创建自己的对象列表等等于重新实现Windows窗体框架,或者至少是其中很大一部分。您不想重新发明轮子,特别是因为您的应用程序中已经有轮子。