///双缓存
RECT rect;
HDC hMemdc;
HBITMAP hBitmap;
//设置背景刷
::GetClientRect(m_hWebWnd,&rect);
hMemdc = CreateDC(L"DISPLAY",NULL,NULL,NULL);
hMemdc = CreateCompatibleDC(m_hdc);
hBitmap = CreateCompatibleBitmap(m_hdc,rect.right-rect.left,rect.bottom-rect.top);
SelectObject(hMemdc,hBitmap);
//重画
{
int nLineSize = psDrawItemInfo->wItemSize * m_fScaleSize;
HPEN hpen = CreatePen( PS_SOLID, nLineSize, psDrawItemInfo->dwItemColor );
HPEN oldPen = (HPEN)SelectObject( hMemdc, hpen ); LOGBRUSH brushlog;
brushlog.lbColor = RGB( 255, 255, 255 );
brushlog.lbHatch = HS_CROSS;
//brushlog.lbStyle = BS_HOLLOW; HBRUSH hbrush = CreateBrushIndirect( &brushlog );
HBRUSH oldBrush = (HBRUSH)SelectObject( hMemdc, hbrush );
FillRect(hMemdc,&rect,hbrush);
//这里需要做适合窗口的运算
int nNewTLX = ((SHORT)(psRectangleInfo->wTLX)) * m_fScaleSize - m_fHPos;
int nNewTLY = ((SHORT)(psRectangleInfo->wTLY)) * m_fScaleSize - m_fVPos;
int nNewBRX = ((SHORT)(psRectangleInfo->wBRX)) * m_fScaleSize - m_fHPos;
int nNewBRY = ((SHORT)(psRectangleInfo->wBRY)) * m_fScaleSize - m_fVPos; Rectangle( hMemdc, nNewTLX, nNewTLY, nNewBRX, nNewBRY );

SelectObject( hMemdc, oldPen );
SelectObject( hMemdc, oldBrush );
DeleteObject( hpen );
DeleteObject( hbrush );
}
BitBlt(m_hdc,rect.left,rect.top,rect.right-rect.left,rect.bottom-rect.top,hMemdc,rect.left,rect.top,SRCCOPY);
DeleteDC(hMemdc);
DeleteObject(hBitmap);
这段代码是我在重画时的代码,有问题,就是每次画新的图形的时候会吧区域中原有图形覆盖了,怎么解决?

解决方案 »

  1.   

    第二次画时,把第一次的画一次呀,
    把hMemdc定义为全局的行不
      

  2.   

    使用GetClipBox获取更新区域同时BitBlt时只回帖更新的部分。
      

  3.   

    这此是在一个函数中?
    RECT rect; 
    HDC hMemdc; 
    HBITMAP hBitmap; 
    //设置背景刷 
    ::GetClientRect(m_hWebWnd,&rect); 
    hMemdc = CreateDC(L"DISPLAY",NULL,NULL,NULL); 
    hMemdc = CreateCompatibleDC(m_hdc); 
    hBitmap = CreateCompatibleBitmap(m_hdc,rect.right-rect.left,rect.bottom-rect.top); 
    SelectObject(hMemdc,hBitmap); 如果是当然是不行了,hMemdc 要保存住