void CLineTestView::OnMouseMove(UINT nFlags, CPoint point) 
{
if(nFlags && MK_LBUTTON)
{
CClientDC dc(this);
int nDrawMode = dc.GetROP2();
dc.SetROP2(R2_NOT);     //  ---->  这里改为  R2_XORPEN   试试。
dc.MoveTo(beginpos.x,beginpos.y);
dc.LineTo(oldpos.x,oldpos.y);dc.MoveTo(beginpos.x,beginpos.y);
dc.LineTo(point.x,point.y);oldpos = point;
dc.SetROP2(nDrawMode);
}
CView::OnMouseMove(nFlags, point);
}

解决方案 »

  1.   

    那就更不行了。
    我还试过了R2_NOTXORPEN,也不行。
      

  2.   

    是新线和旧线相交的问题吧?
    你直接再OnDraw一下得了
      

  3.   

    if (curpen.CreatePen(PS_SOLID,LW,RGB(0,0,0)))
    {
    CPen* oldpen=dc.SelectObject(&curpen);
    int drawmode;
    drawmode=dc.SetROP2(R2_NOT);
    if (m_mousemove)//BOOL 鼠标已经移动过
    {
    dc.MoveTo(prepnt);//第一点
    dc.LineTo(premove);//鼠标上次在的点
    }
    else
    m_mousemove=TRUE;
    dc.MoveTo(prepnt);
    dc.LineTo(point);
    premove=point;
    dc.SetROP2(drawmode);
    dc.SelectObject(oldpen);
    }
      

  4.   

    但同样的环境下,微软的画笔在画直线时候就没有问题,
    难道它每移动一步就InvalidateRect一下吗?
      

  5.   

    你把代码:int nDrawMode = dc.GetROP2();和  dc.SetROP2(nDrawMode);删掉后再试试。
      

  6.   

    我看确实该InvalidateRect一下:)