双缓冲绘图

双缓冲绘图

 

VC 双缓冲绘图

 

BOOL CGraphDlg::OnDraw(CDC* pDC)

{

       CRect rc;

       GetClientRect(&rc); 

      

       CDC  MemDC;

      

       CBitmap  MemBitmap;  

      

       MemDC.CreateCompatibleDC(NULL);      

      

       MemBitmap.CreateCompatibleBitmap(pDC, rc.Size().cx,rc.Size().cy);

      

       CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap);      

      

       MemDC.BitBlt(0,0,rc.width, rc.height, pDC,0,0,SRCCOPY);

      

       m_pGraph->SetGraphDC(&MemDC);

       m_pGraph->DoGraphShowEvent();  

             

       pDC->BitBlt(0,0, rc.Size().cx,rc.Size().cy,&MemDC,0,0,SRCCOPY);  

 

       MemDC.SelectObject(pOldBit);

       MemBitmap.DeleteObject();

       MemDC.DeleteDC();

}

 

Delphi 双缓冲绘图:

procedure TBkCoordi.Draw(Canvas : TCanvas);

var

    _bmp : TBitmap;

    _width, _height : integer;

    _top, _left : integer;

begin

    _width := Round(m_width);

    _height := Round(m_height);

    _left := Round(m_topleft.x);

    _top := Round(m_topleft.y);

 

    _bmp := Tbitmap.Create;

    _bmp.Handle := CreateCompatibleDC(Canvas.Handle);

    _bmp.Width :=  _width;

    _bmp.Height :=  _height;

 

    BitBlt(_bmp.Canvas.Handle,0,0,_width,_height, Canvas.Handle,_left,_top,SRCCOPY);

                 

    if m_showcross then m_cross.Draw(_bmp.Canvas);

    if @OnDrawing <> nil then OnDrawing(_bmp.Canvas);

 

    BitBlt(Canvas.Handle,_left,_top,_width,_height, _bmp.Canvas.Handle,0,0,SRCCOPY);

 

    _bmp.Free;

end;

你可能感兴趣的:(双缓冲绘图)