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;