该方法用于更好的对图形区域进行操作,同时防止闪烁,具体的操作如下:
首先,声明DC对象,及对应的位图对象,
CDC pDC; //内存DC对象,
CBitmap bmpMem; //位图对象,在内存DC上画图时无法显示的,我们可以在位图对象里画好后,直接内存拷贝到窗口DC上即可
CBitmap *oldBitmap; //绘图备份指针
然后初始化对其进行初始化:
pDC.CreateCompatibleDC(GetDC()); //创建内存DC,此时在该DC中画图操作还无法显示到界面上,需要有一个位图对象与之对应,
bmpMem.CreateCompatibleBitmap(GetDC(),200,200); //
//现在我们队pDC的所有操作,都直接影响到位图对象bmpMem;填充背景操作为:CRect rect = CRect(0,0,200,200);pDC.FillSolidRect(&rect,RGB(160,0,160));
到目前为止,我们可以对其进行画图操作,在画完图,进行内存拷贝即可
LOGBRUSH logBrushPrompt;
logBrushPrompt.lbStyle = BS_SOLID;
logBrushPrompt.lbColor = RGB(0,0,0);
CPen myPenPrompt2(PS_DOT|PS_GEOMETRIC|PS_ENDCAP_ROUND,3, &logBrushPrompt);
oldBitmap = pDC.SelectObject(&bmpMem);
CRect rect(0,0,200,200);
pDC.FillSolidRect(&rect,RGB(255,0,0));
pDCt->TextOutW(500,500,_T("nonononfo"));
pDC.SelectObject(&myPenPrompt2);
pDC.MoveTo(200,0);
pDC.LineTo(0,200);
//内存拷贝
GetDC()->BitBlt(0, 0, 200, 200, &pDC, 0, 0, SRCCOPY);
//还原系统绘图指针
pDC.SelectObject(oldBitmap);
到目前为止,画图及显示全部完成。
注:DeleteDC()释放相应的DC.