#include "gdi.h"//自己封装的GDI+库
::Graphics::TBitmap * bmp1;
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
GdiInit();
bmp1 = new ::Graphics::TBitmap;
bmp1->Width = 500;
bmp1->Height= 100;
}
void __fastcall TForm1::FormPaint(TObject *Sender)
{
GdiCreateHandle1(bmp1->Canvas->Handle);
//GdiClear(0xff000000);
bmp1->Canvas->Brush->Color = 0xffD8E9EC;
bmp1->Canvas->FillRect(TRect(0,0,300,500));
GdiSetFont("微软雅黑",20);
GdiDrawString(Now(),20,20,0xfff00f00);
TRect a(0,0,500,100);
TRect b(0,0,500,100);
Canvas->CopyMode = SRCCOPY;
Canvas->CopyRect(a,bmp1->Canvas,b);
GdiReleaseGraphics();
}
先将图形绘制到TBitmap的TCanvas上,等绘制完成后,再将其拷贝到要显的另一个Canvas上,这样也是实现“双绘冲”。
应该和创建内存DC的效果是一样的,只是由于C++builder的封装性,处理更方便。常规创建内存DC的方法如下:
HDC hDC= ::GetDC(NULL);
HDC hComDC = ::CreateCompatibleDC(hDC); //创建个内存DC;
HBITMAP hBitMap = ::CreateCompatibleBitmap(hDC,1024,768);
::SelectObject(hComDC,hBitMap);
COLORREF clrj = ::GetPixel(hComDC, x, y);
可以GDI和GDI+交替在bmp1上画图。