内存DC 双缓存

来源:互联网 发布:access数据库sql查询 编辑:程序博客网 时间:2024/04/30 03:50

该方法用于更好的对图形区域进行操作,同时防止闪烁,具体的操作如下:

首先,声明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.