代码人生的小狗窝

一行行枯燥的代码,却描绘出人生的点点滴滴

您现在的位置是:首页>_C#

怎么在Winform中实现自己绘制得图进行拖动

发布时间:2019-08-17浏览(1653)

    如何在Winform中实现自己绘制得图进行拖动!
    怎么实现自己用GDI+绘制得图形进行拖动,并且可以多个图进行重叠显示?谢谢大侠们!

    ------解决方案--------------------
    把画的图放到容器上
    比如GroupBox或者PictureBox上
    然后拖动容器控件

    重叠显示,就是重新画一张图

    ------解决方案--------------------
    GDI+我也用过一段时间,有一定的了解,以下是我的个人见解
    你想拖动GDI+绘制的图形其实就是把你所绘制的图形位置不断的重载,在鼠标按下的时候记下鼠标的坐标,移动后松开鼠标也有个坐标,通过这两个坐标你就可以得到你所移动的图形的顶点.

    关于重叠最好是调整上面图形的透明度,然后把图形画到你要移到的图形上
    ------解决方案--------------------
    要分别处理MouseDown,MouseMove,MouseUp事件。

    在MouseDown的时候判断鼠标位置是否在图形区域内,MouseMove的时候不断刷新重绘,根据鼠标及时坐标重画新图形,擦除之前图形。MouseUp和MouseMove类似。

    至于重叠,你可以把所有图形的GraphicPath加到一个List里面,按顺序画到屏幕上就可以了
    ------解决方案--------------------
    调用API获得颜色,然后判断坐标,如果是你画的图,就改变绘图参数,重新绘制一遍,你是要做绘图板吧,哪个学校的?
    ------解决方案--------------------
    把画的图放到容器上
    比如GroupBox或者PictureBox上
    然后拖动容器控件

    重叠显示,就是重新画一张图

    要分别处理MouseDown,MouseMove,MouseUp事件。
    ------解决方案--------------------
    要么用多个PictrueBox,要么像我说的调用一系列WIN API来实现
    ------解决方案--------------------
    private void Login_MouseDown(object sender, MouseEventArgs e)
    //记录鼠标点击的初始位置
    {
    if (e.Button == MouseButtons.Left)
    {
    //pSrc = new Point();
    //pSrc.X = e.X;
    //pSrc.Y = e.Y;
    sx = e.X;
    sy = e.Y;
    }
    }

    private void Login_MouseMove(object sender, MouseEventArgs e)
    {
    if (e.Button == MouseButtons.Left)
    {
    Point pDest = PointToScreen(new Point(e.X, e.Y));
    this.Location = new Point(pDest.X - sx, pDest.Y - sy);//pSrc.X, pDest.Y - pSrc.X);
    }
    }

    protected int sx, sy;

    private void Login_MouseUp(object sender, MouseEventArgs e)
    {
    }
    ------解决方案--------------------
    楼上的。。。
    你的代码解决不了他的问题。。。
    ------解决方案--------------------
    code project 上有源代码。我现在也在研究这个问题。
    ------解决方案--------------------
    我做的图型控件以后也要实现这个功能,先帮你顶
    ------解决方案--------------------
    我QQ 378138668 加我先,以后一起研究啊
    ------解决方案--------------------
    你要记录下所有的操作,每次的操作都是一个对象,每个对象都有一个移动的方法.
    每个对象在不同的层上