请教高手:GDI+的问题
我现在在做毕业设计,是做一个类似于AUTOCAD那样的工具软件(当然功能没有那么强大:),该软件能够绘制点、直线、圆、椭圆、三角形、四边形、梯形、多边形等图形,这些图形都以对象的方式呈现,即可以对它们进行拖放、旋转、删除等。现在我的问题是:对于绘制的图形对象,如何选取它,并对它进行相应操作?即:当鼠标滑过某对象上方时,要检测到该事件,鼠标指针就发生变化,点击即可选中该物体,也作可以拖动,旋转等操作。
我的基本想法是:利用MouseMove事件,得到当前鼠标位置,然后对所有已经绘制的对象,逐一判断鼠标位置是否位于该对象上,根据不同的对象(直线或圆或其它)显示不同的鼠标指针,然后可对该对象进行选中、拖拽等操作。
但我想这样做非常麻烦,不知道各位高手是不是有更好的办法?谢谢指教! --------------------编程问答-------------------- 设计思路是正确的,实现上可以讨论。
你可以实现一个图形基类,用于来实现绘制的接口和一些公用的属性和方法,如是否选中,鼠标是否处于图形的有效区域,图形的ZOrder等等。
然后通过继承的方式实现各个图形类来,这些在图形类中完成各自的实际绘制工作。
每绘制一个图形,就在创建一个图形实例并记录在一个集合中
在MouseMove事件里已基类的方式枚举所有的图形实例,调用基类提供的方法判断是否位于该对象,应该显示什么样的指针,是否可以执行操作。 --------------------编程问答-------------------- 好象冒得什么简单点的办法,用重载OVERRIDE,在你拖动后,比如直线,就先获得鼠标坐标,鼠标移动多少,直线两头坐标点就移动多少,然后重绘. --------------------编程问答-------------------- Dionix说的很好.
关键不是图片的移动,而是图形的分类,以及数据结构的选择.
楼主好好研究下,其实不难. --------------------编程问答-------------------- GraphicsPath.IsVisible()
GraphicsPath.IsOutlineVisible()
以上两个方法你查一下MSDN,一定对你有帮助。 --------------------编程问答-------------------- 谢谢各位的热心帮助!其实我和Dionix 的想法差不多,只是想知道有无更好的办法来实现 --------------------编程问答-------------------- 还有要感谢effun,我也想过把所绘制的图形用Region包起来,然后判断鼠标是否在该Region内可见,比较不错的提议
补充:.NET技术 , C#