如何在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 加我先,以后一起研究啊
------解决方案--------------------你要记录下所有的操作,每次的操作都是一个对象,每个对象都有一个移动的方法.
每个对象在不同的层上