代码如下
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: Add any drawing code here...
RECT rt;
GetClientRect(hWnd, &rt);
//***********************
MoveToEx(hdc,pt[0].x,pt[0].y,NULL);
LineTo(hdc,pt[1].x,pt[1].y);
//***********************
EndPaint(hWnd, &ps);
break;
//**************************************//
case WM_LBUTTONDOWN:
pt[0].x=LOWORD(lParam);
pt[0].y=HIWORD(lParam);
break;
case WM_LBUTTONUP:
pt[1].x=LOWORD(lParam);
pt[1].y=HIWORD(lParam);
InvalidateRect(hWnd,NULL,false);
break;
case WM_MOUSEMOVE:
pt[1].x=LOWORD(lParam);
pt[1].y=HIWORD(lParam);
InvalidateRect(hWnd,NULL,true);//问题就是这里应该用什么语句来保存画的东西呢,但也不能有连续的很多线条指向第二个点的线条
break;

解决方案 »

  1.   

    如果那句用InvalidateRect(hWnd,NULL,FALSE); 就会有很多的线指向第二点。头痛啊,我只要一条线指向第二个点
      

  2.   

    这个语句:
    InvalidateRect(hWnd,NULL,true);
    究竟有什么问题?客户区没有直线?当鼠标左键松开后画了直线吗?至于参数为false时,应该不是很多线指向第二个点,是很多线指向第一个点吧?因为第一个点是不变的,而第二个点是一直在变的,而false是没有擦除以前的线条,所以记录了你鼠标移动过程中的所有线条,也就是很多个第二个点和第一个点的连线从你的代码中,我只能分析出这么多信息,要不你就再把现象说详细些,要不就等内行来,呵呵
      

  3.   

    你是用SDK写的吧
    保存上一次鼠标点,每次WM_PAINT的时候画两次 第一次用SetROP2(hdc,R2_NOT);清除上一次画的线,第2次在来画线
      

  4.   

    哦 不好意识看错了 case WM_LBUTTONDOWN:
    pt[iCount++].x=LOWORD(lParam);
    pt[iCount++].y=HIWORD(lParam);
    break;然后在case WM_PAINT中
    for (int i=0;i<iCount;i++)
    ...
    MoveToEx
    LineTo
    ...
    循环打印出来
    不就可以了