求问用鼠标在直线上选中一点后拖动该直线, 请教怎样实现
发布网友
发布时间:2022-04-25 14:36
我来回答
共1个回答
热心网友
时间:2023-10-09 10:12
一条y=0的直线,想要实现如下的功能:在线段的上下某个范围或线段上按下鼠标拖动后,直线能够按照鼠标拖动的轨迹重新绘图。
例如:_________________________ 拖动前
.......... ............ 鼠标向下拖动
. .
或者有没有其他更好的工具来实现这种功能。
先谢过了。
------解决方案--------------------------------------------------------
首先要做的就是先选中这条直线,可以用直线和一个小矩形相交的算法来实现选中,选中以后按照在、鼠标的移动重绘就比较简单了,你只需要就你鼠标移动的两个点之间的距离,然后将直线平移相应的距离就行了,我的程序也有这个需求已经实现了,这种方法是可行的
------解决方案--------------------------------------------------------
计算出直线公式啊,在判断点是否在直线上,(判断的时候取一个范围,就好了,精确在直线上不可能)
拖动的时候先用背景色重绘,覆盖前一直线,然后在拖动到的位置画线.
有点数学知识都可以搞定啊.
不过你要用虚线表示以前的位置,自己找找看,没搞过,原理应该一样.
------解决方案--------------------------------------------------------
在WM_LBUTTONDOWN消息中SetCapture,此时进入鼠标位置监控状态,在WM_PAINT里面重新绘制这个直线,绘制位置是基本位置+鼠标位置偏移值,在WM_LBUTTONUP消息中ReleaseCapture并重设直线的最终位置。
------解决方案--------------------------------------------------------
1、鼠标按下时,记录坐标p1;
2、判断p1上下左右N个像素内是否有直线穿过
3、鼠标松开时,记录坐标p2;
4、p2.x-p1.x , p2.y-p1.y就是该直线对应两顶点应该加减的值
——————————————————|——————————————————————
——————————————————|——————————————————————·||——————————————————|——————————————————————
——————————————————|——————————————————————
------解决方案--------------------------------------------------------
做过,,,给你基本思路
把你要移动的图形对象自己定义一个类;