在MM_LOMETRIC 下用双缓存,屏幕显示一堆乱七八糟的动写,怎样才能让图形能够正确显示出来呢?

解决方案 »

  1.   

    我用的就是MM_LOMETRIC 下的双缓存。你把你的代码写出来,我替你修改。
      

  2.   

    CPaintDC *dc =new CPaintDC(this);
    int nWidth=800,nHeight=600;
    CDC *pDC=new CDC;
    CBitmap bmp;
    pDC->CreateCompatibleDC(dc);
    bmp.CreateCompatibleBitmap(dc,nWidth,nHeight);
    CBitmap *pBmp=pDC->SelectObject(&bmp);
    pDC->FillSolidRect(0,0,nWidth,nHeight,RGB(255,255,255));
    pDC->SetMapMode(MM_LOMETRIC   );
    pDC->MoveTo(0,0);
    pDC->LineTo(100,-200);
    //pDC->Rectangle(10,10,200,200);
    dc->BitBlt(0,0,nWidth,nHeight,pDC,0,0,SRCCOPY);
    pDC->SelectObject(pBmp);
    我是在OnPaint() 中写的
      

  3.   

    大致应该这样,不便调试,如有问题,请发短信。CPaintDC dc(this);
    CDC dcMem; 
    CRect rect;
    GetClientRect(rect);CBitmap memBitmap;
    dc.SetMapMode(MM_LOMETRIC);
    dcMem.CreateCompatibleDC(&dc);
    dcMem.SetMapMode(MM_LOMETRIC);
    memBitmap.CreateCompatibleBitmap(&dc, rect.Width(), rect.Height());
    dc.DPtoLP(rect); CBitmap *pOldBit = dcMem.SelectObject(&memBitmap);
    dcMem.FillSolidRect(rect, RGB(255, 255, 255));dcMem.MoveTo(0,0);
    dcMem.LineTo(100,-200);dc.BitBlt(0, 0, rect.Width(), rect.Height(), &dcMem, 0, 0, SRCCOPY);
    dcMem.SelectObject(pOldBit);
      

  4.   

    CPaintDC *dc =new CPaintDC(this);
    int nWidth=800,nHeight=600;
    CDC *pDC=new CDC;
    CBitmap bmp;
    pDC->CreateCompatibleDC(dc);
    bmp.CreateCompatibleBitmap(dc,nWidth,nHeight);
    CBitmap *pBmp=pDC->SelectObject(&bmp);
    pDC->SetMapMode(MM_LOMETRIC   );
    pDC->FillSolidRect(0,0,nWidth,-nHeight,RG(255,255,255));

    pDC->MoveTo(0,0);
    pDC->LineTo(100,-200);
    //pDC->Rectangle(10,10,200,200);
    pDC->SetMapMode(MM_TEXT  );
    dc->BitBlt(0,0,nWidth,nHeight,pDC,0,0,SRCCOPY);
    pDC->SelectObject(pBmp);
    问题已解决,映射完后我又映射回来了,谢谢你给我提供了思路,我还想问一个问题,现在我的代码存在闪屏,可是我有从载不了OnEraseBkgnd(CDC* pDC)函数,能不能帮忙解决一下。