不要用Invalidate(TRUE) ,用InvalidateRect(...),指定要刷新的区域,只要包含你的线就可以了,区域越小,闪烁就越小。

解决方案 »

  1.   

    可以用内存DC。先画在他上面,然后BitBlt.结合楼上的用法更好。
      

  2.   

    _________
    | A     |
    |    ___|___
    |   | C |   |
    ____|___|   |
        |     B |
        |-------|C = A交BI
    InvalidateRect( a.left, a.top, a.rigth, c.top);
    InvalidateRect( a.left, c.top, b.rigth, c.bottom);
    InvalidateRect( c.left, c.bottom, b.rigth, b.bottom);
      

  3.   

    to yaw() and hooligan(风)
    我试了你们的方法,但是自己又时画的线也被重画掉了
    CRect rect;
    GetWindowRect(&rect);
    InvalidateRect(CRect(oldpoint.x-1,0,oldpoint.x+1,rect.Height()),FALSE);
    InvalidateRect(CRect(0,oldpoint.y-1,rect.Width(),oldpoint.y+1),FALSE);
    CDC * pDC=GetDC();
    // m_pChart->DoDraw(pDC,  &m_DragInfo );
    CPen pen(PS_SOLID,1,RGB(180,180,180));
    CPen *oldPen;
    oldPen=pDC->SelectObject(&pen);
    pDC->MoveTo(CPoint(point.x,0));
    pDC->LineTo(CPoint(point.x,rect.Height()));
    pDC->MoveTo(CPoint(0,point.y));
    pDC->LineTo(CPoint(rect.Width(),point.y));
    pDC->SelectObject(oldPen);
      

  4.   

    是这个样子的,你应该把画线的代码放在OnDraw里
      

  5.   

    然后在OnMouseMove中调InvalidateRect()
      

  6.   

    利用光栅操作(异或操作,画两次同样的线就会擦除),在鼠标移动消息时先重画要擦掉的线再画现在要的线,
    void DrawLine(CDC *pDC,CPoint point)
    {
    int oldrop=pDC->SetROP2(R2_NOTXORPEN);
    CPen pen(PS_DOT,1,RGB(192,192,192));
    CPen*oldpen=pDC->SelectObject(&pen);
             pDC->MoveTo(CPoint(point.x,0));
             pDC->LineTo(CPoint(point.x,rect.Height()));
             pDC->MoveTo(CPoint(0,point.y));
             pDC->LineTo(CPoint(rect.Width(),point.y));
             pDC->SetROP2(oldrop);
    pDC->SelectObject(oldpen);
    }
    这样不用重新刷新,就不会闪屏了
      

  7.   

    to hooligan(风) 
    试了,还是不行
      

  8.   

    CRect rect;
    GetWindowRect(&rect);
    CClientDC pDC(this);
    CPen *oldPen;
    InvalidateRect(NULL,true);
    this->UpdateWindow();
    CPen pen(PS_SOLID,1,RGB(180,180,180));
    oldPen = pDC.SelectObject(&pen);
    pDC.MoveTo(CPoint(point.x,0));
    pDC.LineTo(CPoint(point.x,rect.Height()));
    pDC.MoveTo(CPoint(0,point.y));
    pDC.LineTo(CPoint(rect.Width(),point.y));
    pDC.SelectObject(oldPen);
    试试这个吧:)应该可以的