我写一个画曲线的程序  用WM_MOUSEMOVE消息 用 GET_X_LPARAM 和 GET_Y_LPARAM来获取光标所在位置的坐标
然后用MoveToEx和LineTo来画线  画出来的大致是曲线  是由一段一段的小短线构成的  而且鼠标滑过的速度越快 小短线就越长  离谱的长
还有这些短线全部是水平的(X方向)  无法画出竖直的线
请问 鼠标移动时 点是如何被捕获的呢  捕获的频率呢
是不是有专门画曲线的相关函数   我这方法是自己尝试的 效果不太好
PS:自学真是不容易啊 还望大侠们指教

解决方案 »

  1.   

    还有这些短线全部是水平的(X方向) 无法画出竖直的线
    不可能吧,代码问题吧请问 鼠标移动时 点是如何被捕获的呢 捕获的频率呢
    这个和你消息循环处理速度有关,就是和你机器运行速度有关是不是有专门画曲线的相关函数 我这方法是自己尝试的 效果不太好
    是的,贝塞尔曲线函数
    PolyBezier  这个就是API
      

  2.   

    BOOL Polygon( LPPOINT lpPoints, int nCount );
    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 );
      

  3.   

    代码是这样的  不知道可行不(pt1和pt2在前面定义为静态的POINT) case WM_LBUTTONDOWN:
    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;
    }
      

  4.   

    哇 我终于找到错在哪儿了 
    MoveToEx(hdc_curve,pt1.x,pt2.y,NULL);
    应该改为
    MoveToEx(hdc_curve,pt1.x,pt1.y,NULL);就是 pt2.y改为pt1.y   正是起点为(pt1.x,pt1.y)