CPen rpen(PS_SOLID,2,RGB(0,255,0)),*oldpen;
CWnd * pAcStaticDraw = GetDlgItem(IDC_STATIC_DRAW);//获取窗口
CDC  *pControlDC = pAcStaticDraw->GetDC();//得到相应的dc
CDC memDC;
CBitmap bitmap,*pOldBitmap;
pAcStaticDraw->UpdateWindow(); memDC.CreateCompatibleDC(pControlDC);
         bitmap.CreateCompatibleBitmap(pControlDC,100,100); pOldBitmap = memDC.SelectObject( &bitmap );
oldpen = memDC.SelectObject( &rpen );
memDC.Ellipse(0,0,100,100);
int t = memDC.SetBkColor(RGB(153,153,255));         pControlDC->BitBlt(0,0,100,100,&memDC,0,0,SRCCOPY); memDC.SelectObject(oldpen);
memDC.SelectObject(pOldBitmap);
DeleteObject(rpen);
pAcStaticDraw->ReleaseDC(pControlDC);
    DeleteDC(memDC);

解决方案 »

  1.   

    重载OnEraseBkgndBOOL CMyView::OnEraseBkgnd(CDC* pDC) 
    {
    return false;
    }
      

  2.   

    重载OnEraseBkgnd就OK了 ^_^
      

  3.   

    BOOL CMyView::OnEraseBkgnd(CDC* pDC) 
    {
    return TRUE;
    }
    是TRUE!!!
      

  4.   

    BOOL CMyView::OnEraseBkgnd(CDC* pDC) 
    {
    return TRUE;
    }
      

  5.   

    50ms也就是说一秒刷新20次,肯定会闪。一秒刷新25次(40ms)应该好一些。
      

  6.   

    我返回TRUE;可是我的对话框变成透明的拉
    我主要的问题是:bitblt到屏幕上时,该图的背景颜色不停的变化。
      

  7.   

    返回TRUE与FALSE都无所谓,关键是你不能够是重载Dialog的OnEraseBkgnd(CDC* pDC) ,这有什么用呢?解决的办法只有一个,派生一个CYourStatic;BOOL CYourStatic::OnEraseBkgnd(CDC* pDC) 
    {
       return true;
    }
    BOOL CYourStatic::OnPaint() 
    {
    CPaintDC dc(this);
    CDC memDC;
    CBitmap bitmap,*pOldBitmap;memDC.CreateCompatibleDC(&dc);
    bitmap.CreateCompatibleBitmap(&dc,100,100);pOldBitmap = memDC.SelectObject( &bitmap );
    /*如果露出不想看到的背景的话就加下面的背景
    CRect rect;
    GetClientRect(rect);
    memDC.FillSolidRect(rect, RGB(...));
    */
    ....
    }
      

  8.   

    根据人眼的惰性以及显示的余辉情况一般50HZ(20毫秒)情况下会感觉不闪烁
    这也仅仅是用在电视、电影等技术中 
    人眼离电脑很近,所以50Hz不能够满足,你把刷新率调到60Hz看看,依然在闪烁,这种情况至少要到75Hz才可以感觉不在闪烁
      

  9.   

    为什么不能重载歌载舞重载Dialog的OnEraseBkgnd(CDC* pDC),可以啊.只是直接return的话,对话框就会透明