最近下载了一个C# DrawTools,运行时有几个地方不明白,为什么在画图的过程中鼠标可以选中图形,而且还可以拖动,请问各位大虾这个功能是怎么实现的...

解决方案 »

  1.   

    把代码贴出来啊,是不是用ArcEngine做的?
      

  2.   

    对于每个画出来的对象,它都有一个Handle的概念,事实上就是控制点,比如DrawRectangle,它就有
    /// <summary>
            /// Move handle to new point (resizing)
            /// </summary>
            /// <param name="point"></param>
            /// <param name="handleNumber"></param>
            public override void MoveHandleTo(Point point, int handleNumber)
            {
                int left = Rectangle.Left;
                int top = Rectangle.Top;
                int right = Rectangle.Right;
                int bottom = Rectangle.Bottom;            switch ( handleNumber )
                {
                    case 1:
                        left = point.X;
                        top = point.Y;
                        break;
                    case 2:
                        top = point.Y;
                        break;
                    case 3:
                        right = point.X;
                        top = point.Y;
                        break;
                    case 4:
                        right = point.X;
                        break;
                    case 5:
                        right = point.X;
                        bottom = point.Y;
                        break;
                    case 6:
                        bottom = point.Y;
                        break;
                    case 7:
                        left = point.X;
                        bottom = point.Y;
                        break;
                    case 8:
                        left = point.X;
                        break;
                }            SetRectangle(left, top, right - left, bottom - top);
            }将其中一个控制点移动到新的位置并重设Rectangle的范围对于Move,它用
    /// <summary>
            /// Move object
            /// </summary>
            /// <param name="deltaX"></param>
            /// <param name="deltaY"></param>
            public override void Move(int deltaX, int deltaY)
            {
                rectangle.X += deltaX;
                rectangle.Y += deltaY;
            }
    来将rectangle的坐标进行平移
      

  3.   


    那也是画上去的,你看GraphicsList类中有public void Draw(Graphics g)
            {
                int n = graphicsList.Count;
                DrawObject o;            // Enumerate list in reverse order to get first
                // object on the top of Z-order.
                for (int i = n - 1; i >= 0; i--)
                {
                    o = graphicsList[i];                o.Draw(g);                if (o.Selected == true)
                    {
                        o.DrawTracker(g);
                    }
                }
            }
    就是一个对象是selected状态时,就画Tracker,然后你再看DrawObject类中有/// <summary>
            /// Draw tracker for selected object
            /// </summary>
            /// <param name="g"></param>
            public virtual void DrawTracker(Graphics g)
            {
                if ( ! Selected )
                    return;            SolidBrush brush = new SolidBrush(Color.Black);            for ( int i = 1; i <= HandleCount; i++ )
                {
                    g.FillRectangle(brush, GetHandleRectangle(i));
                }            brush.Dispose();
            }
    都是画上去的
      

  4.   

    额。。多写写多看看就能明白了。。你说的选择框是在ToolPointer里实现的,在MouseMove的时候有这么一段if (selectMode == SelectionMode.NetSelection)
                {
                    // Remove old selection rectangle
                    ControlPaint.DrawReversibleFrame(
                        drawArea.RectangleToScreen(DrawRectangle.GetNormalizedRectangle(startPoint, oldPoint)),
                        Color.Black,
                        FrameStyle.Dashed);                // Draw new selection rectangle
                    ControlPaint.DrawReversibleFrame(
                        drawArea.RectangleToScreen(DrawRectangle.GetNormalizedRectangle(startPoint, point)),
                        Color.Black,
                        FrameStyle.Dashed);                return;
                }
    就是用来画选择框的