CDC* pDC=GetDC(); 
CPen newPen(PS_SOLID,2,RGB(0,0,255)); 
CPen* poldPen=pDC->SelectObject(&newPen); 
pDC->MoveTo(20,20); 
pDC->LineTo(x1*FRONTWIDTH+20,y1*(FRONTHEIGHT-14)+20); 
pDC->SelectObject(&poldPen);擦掉(再画一次,颜色改为你的背景颜色)
 
CPen newPen1(PS_SOLID,2,背景颜色); 
CPen* poldPen1=pDC->SelectObject(&newPen1); 
pDC->MoveTo(20,20); 
pDC->LineTo(x1*FRONTWIDTH+20,y1*(FRONTHEIGHT-14)+20); 
pDC->SelectObject(&poldPen1);

解决方案 »

  1.   

    SetROP2()是cdc成员函数,参数设为R2_NOT
      

  2.   

    8楼的是不是搞错了?
    使用背景混合模式 
    CDC* pdc=GetDC();   
    //得到对话框背景色   
    pdc->SetBkMode(TRANSPARENT);   
    //绘制原文本   
    pdc->TextOut(50,40,_T("121313"));   
    //覆盖原文本   
    pdc->SetROP2(R2_NOP); //将画笔与画刷的颜色设置成背景色 
    pdc->TextOut(50,40,_T("121313"));   
    //输出新文本   
    pdc->SetROP2(R2_COPYPEN); //恢复画笔与画刷默认的颜色 
    pdc->TextOut(50,40,_T("7804957"));   
    ReleaseDC(pdc); 
      

  3.   

    我觉得用这种方法做比较好,先NEW一个DC,然后建一个和你图像大小相同的位图,将它选入DC,然后将你的图像COPY到这个位图的数据区,然后用DC画图,画好后将你建的内存位图数据COPY到你的图上,想擦时用原位图数据盖一下就可以了.
    /////////////////////////////////////
    HDC hDC ; 
    hDC = ::GetDC(NULL); 
    if(m_hSourceBitmap!=NULL)
    {
    DeleteObject(m_hSourceBitmap);
    m_hSourceBitmap=NULL;
    }
        m_hSourceBitmap = CreateDIBSection( hDC,(LPBITMAPINFO)m_pcImage, 0,&m_ppvBits,NULL, 0 );
    if(m_hSourceBitmap==NULL)
    {
    MessageBox("分配内存失败","警告信息");
    return false; }
    ::ReleaseDC( NULL,hDC );
    m_pOldBitmap=(HBITMAP *)m_pMemDC->SelectObject(m_hSourceBitmap);
    memcpy( m_ppvBits, m_pcImageData, m_lLineBytes*m_lHeight );这是我的程序的一部分,m_pcImagedata就是位图数据,以后就可以用m_pMemDC画图了,想显示的时候bitblt一下就可以了.
    你查一下双缓冲画图可以查到的.
    当然上面的重画也是可以做到的,只是要记以前的点,
      

  4.   

    用一个白色的画刷对背景进行重绘,如下:
    CBrush brush;
    brush.CreateSolidBursh(COLORREF(RGB(255,255,255)));
    CRect rc;
    GetClientRect(&rc);
    pDC->FillRect(rc,&brush);