简单的说,我取得桌面的DC后在其上面画了一个圆,现在我想把这个圆去掉该怎么办?
CDC *pdc = GetDesktopWindow()->GetWindowDC() ;
pdc->SetBkMode(TRANSPARENT);
pdc->SelectStockObject(HOLLOW_BRUSH);

解决方案 »

  1.   

    只有把原来的保存下来,恢复时再覆盖回去,如果不担心闪烁,可以用
    RedrawWindow(GetDesktopWindow(), ...)
      

  2.   

    用MemDC将背景保存起来,保存到位图
      

  3.   

    用Xor画笔,在原位置再画一个
      

  4.   

    to MSPY(微软拼音) ,我试了,画了后变成黑的了,更乱了
      

  5.   

    好了,下面代码可以实现在屏幕上循环画一个大小变化不断的圆.
    初学VC,希望大家不要见笑.
    void CFUXIDlg::OnOK() 
    {
    int i ;
    int cx = GetSystemMetrics(SM_CXSCREEN);
    int cy = GetSystemMetrics(SM_CYSCREEN); CDC dc;
    dc.CreateDC("DISPLAY",NULL,NULL,NULL);
    dc.SetBkMode(TRANSPARENT);
    dc.SelectStockObject(HOLLOW_BRUSH);
    CBitmap cbitmap;
    cbitmap.CreateCompatibleBitmap(&dc,cx,cy);
    CDC MemDC;
    MemDC.CreateCompatibleDC(&dc);
    CBitmap*pOld=MemDC.SelectObject(&cbitmap);
    RECT rect; dc.MoveTo(cx/2,0);
    dc.LineTo(cx/2,cy);
    dc.MoveTo(0,cy/2);
    dc.LineTo(cx,cy/2); while(TRUE)
    {
    for(i=0; i<=cy/2; i+=10)
    {
    rect.left   = cx/2 - i;
    rect.top    = cy/2 - i;
    rect.right  = cx/2 + i;
    rect.bottom = cy/2 + i;

       MemDC.BitBlt(0,0,i * 2,i * 2,&dc,rect.left,rect.top,SRCCOPY );
    dc.Ellipse(&rect);
    Sleep(30);
    dc.BitBlt(rect.left,rect.top,i * 2,i * 2,&MemDC,0,0,SRCCOPY);
    }
         for(; i>=0; i-=10)
    {
    rect.left   = cx/2 - i;
    rect.top    = cy/2 - i;
    rect.right  = cx/2 + i;
    rect.bottom = cy/2 + i; MemDC.BitBlt(0,0,i * 2,i * 2,&dc,rect.left,rect.top,SRCCOPY );
    dc.Ellipse(&rect);
    Sleep(30);
    dc.BitBlt(rect.left,rect.top,i * 2,i * 2,&MemDC,0,0,SRCCOPY);
    }
    }
    MemDC.SelectObject(pOld);
    ReleaseDC(&dc);
    ReleaseDC(&MemDC);
    }