我写一个画曲线的程序 用WM_MOUSEMOVE消息 用 GET_X_LPARAM 和 GET_Y_LPARAM来获取光标所在位置的坐标
然后用MoveToEx和LineTo来画线 画出来的大致是曲线 是由一段一段的小短线构成的 而且鼠标滑过的速度越快 小短线就越长 离谱的长
还有这些短线全部是水平的(X方向) 无法画出竖直的线
请问 鼠标移动时 点是如何被捕获的呢 捕获的频率呢
是不是有专门画曲线的相关函数 我这方法是自己尝试的 效果不太好
PS:自学真是不容易啊 还望大侠们指教
然后用MoveToEx和LineTo来画线 画出来的大致是曲线 是由一段一段的小短线构成的 而且鼠标滑过的速度越快 小短线就越长 离谱的长
还有这些短线全部是水平的(X方向) 无法画出竖直的线
请问 鼠标移动时 点是如何被捕获的呢 捕获的频率呢
是不是有专门画曲线的相关函数 我这方法是自己尝试的 效果不太好
PS:自学真是不容易啊 还望大侠们指教
不可能吧,代码问题吧请问 鼠标移动时 点是如何被捕获的呢 捕获的频率呢
这个和你消息循环处理速度有关,就是和你机器运行速度有关是不是有专门画曲线的相关函数 我这方法是自己尝试的 效果不太好
是的,贝塞尔曲线函数
PolyBezier 这个就是API
BOOL PolyPolygon( LPPOINT lpPoints, LPINT lpPolyCounts, int nCount );
BOOL PolyPolyline( const POINT* lpPoints, const DWORD* lpPolyPoints, int nCount );
BOOL PolyBezier( const POINT* lpPoints, int nCount );
GetCursorPos(&pt1);
ScreenToClient(hwnd,&pt1);
IS_DRAW_CURVE=TRUE;
break; case WM_MOUSEMOVE:
//画线功能被选择 且左键按下
if((DRAW_CURVE==DRAW_WHICH) & (TRUE==IS_DRAW_CURVE))
{
HDC hdc_curve;
hdc_curve=GetDC(hwnd);
pt2.x=GET_X_LPARAM(lParam);
pt2.y=GET_Y_LPARAM(lParam); MoveToEx(hdc_curve,pt1.x,pt2.y,NULL);
LineTo(hdc_curve,pt2.x,pt2.y); pt1.x=pt2.x;
pt1.y=pt2.y;
}
MoveToEx(hdc_curve,pt1.x,pt2.y,NULL);
应该改为
MoveToEx(hdc_curve,pt1.x,pt1.y,NULL);就是 pt2.y改为pt1.y 正是起点为(pt1.x,pt1.y)