在给单文档添加位图背景时,采用了双缓存,但是运行时还是会出现闪烁,求大侠们帮忙解决一下。void COne_1View::OnDraw(CDC* pDC)
{
COne_1Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc); CBitmap mbmp;
mbmp.LoadBitmap(IDB_BITMAP1); BITMAP bm;
mbmp.GetObject(sizeof(BITMAP),&bm); CDC dcMem;
dcMem.CreateCompatibleDC(pDC); CBitmap* pOldbmp = dcMem.SelectObject(&mbmp); pDC->BitBlt(0,0,bm.bmWidth,bm.bmHeight,&dcMem,0,0,SRCCOPY); dcMem.SelectObject(pOldbmp);}

解决方案 »

  1.   

    1.按你现在的代码,你应该加个变量让加位图背景的语句只执行一次.就是:
    if(!m_Refresh)
    {
    m_Refresh=TRUE;
    添加背景语句
    }
    2.
    你重载OnEraseBkgnd这个函数,屏蔽默认的语句,直接返回FALSE试试,但你得测试其它功能是否正常
      

  2.   


    我最早是添加了一个函数,在函数内使用这段代码,里面加了只运行一次的标志,但没重载OnEraseBkgnd,再用OnDraw调用这个函数,但运行时,一刷屏,背景就变成空白了。谢谢你啊,我加上OnEraseBkgnd试试。
      

  3.   

    OnEraseBkgnd 直接返回True看看
      

  4.   

    已解决;1、在View类中添加变量CBrush myBrush;2、在View构造函数中添加:
          CBitmap bmp;
         bmp.LoadBitmap(IDB_BITMAP1);
         myBrush.CreatePatternBrush(&bmp);3、在OnDraw中添加:
          CRect rect;
         GetClientRect(rect);
         pDC->FillRect(rect,&myBrush);4、给View添加OnEraseBkgnd(CDC* pDC)消息函数
         直接返回TRUE;功能是实现了,还请高手帮忙看看有什么不足的地方,或者还有什么更好的办法解决这个问题?
      

  5.   

    我习惯在OnEraseBkgnd加载背景,loadbitmap,bitblt/StretchBlt