如何实现象window画图工具一样的画线呢?在利用鼠标画一条直线时,按住鼠标左键并托拽,先画出随鼠标移动的直线,当释放左键后才真正画出一条所需要的直线。
我在OnMouseMove()事件中,采用对客户区用白色填充的办法来实现,可是当画第二条线的时候,先前画的就没有了?
各位有什么高见呢?还有什么好方法呢?

解决方案 »

  1.   

    捕捉鼠标点击消息,在处理函数中得到坐标(如起始点,中止点)
    捕捉鼠标移动消息,在处理函数中得到坐标(B),MSDN查一下用CDC的成员函数,好像是
    Lineto(起始点,B)
      

  2.   

    采用对客户区用白色填充的办法来实现
    这个地方是有问题的,应该将画过线的DC作为背景保存,每次都应该重画这个背景。
    比如,
    没划线的时候,背景是一个白框(*pBackScreen)
    开始画第一条线,每次RePaint的时候用*pBackScreen重画画板,再画移动的线
    第一条线结束,那么背景就变成了刚刚画好的画板,重新设置*pBackScreen
    开始画第二条线的时候,每次RePaint的时候用*pBackScreen重画画板,再画移动的线
    依此类推。
      

  3.   

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

  4.   

    //头文件定义:CPoint mPointOrign, mPointOld;
    OnMouseMove中  
           CClientDC dc(this);
    CPen pen(0,0,RGB(0,0,0));
    CPen* pOldPen = dc.SelectObject(&pen);
    dc.SetROP2(R2_NOT);//设置成R2_NOT
    if (mPointOld != point)
    {
    dc.MoveTo(mPointOrign);
    dc.LineTo(mPointOld);
    dc.MoveTo(mPointOrign);
    dc.LineTo(point);
    mPointOld = point;
    }
    OnLButtonDown中
            mPointOrign = point;
            mPointOld = point;
            SetCapture();
    OnLButtonUp中
            ReleaseCapture();程序不是很完整,给一个思路把,OnMouseMove还要加点判断,比如鼠标放开,就不要在画线了,等等