双缓存

来源:互联网 发布:最值得看的电影 知乎 编辑:程序博客网 时间:2024/04/30 19:50
CDC MemDC; //首先定义一个显示设备对象
CBitmap MemBitmap;//定义一个位图对象


//随后建立与屏幕显示兼容的内存显示设备
MemDC.CreateCompatibleDC(NULL);
//这时还不能绘图,因为没有地方画 ^_^
//下面建立一个与屏幕显示兼容的位图,至于位图的大小嘛,可以用窗口的大小
MemBitmap.CreateCompatibleBitmap(pDC,nWidth,nHeight);


//将位图选入到内存显示设备中
//只有选入了位图的内存显示设备才有地方绘图,画到指定的位图上
CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap);


//先用背景色将位图清除干净,这里我用的是白色作为背景
//你也可以用自己应该用的颜色
MemDC.FillSolidRect(0,0,nWidth,nHeight,RGB(255,255,255));


//绘图
MemDC.MoveTo(……);
MemDC.LineTo(……);


//将内存中的图拷贝到屏幕上进行显示
pDC->BitBlt(0,0,nWidth,nHeight,&MemDC,0,0,SRCCOPY);


//绘图完成后的清理
MemBitmap.DeleteObject();
MemDC.DeleteDC();


补充说明PS:

    你完全没有理解什么是双缓存。。。。
这里所说的双缓存实际上就是双页面(双DC),也就是说我们需要两个DC。
第一个DC,你已经提供了,那就是传入Draw函数的pDC,这个DC就是主页面,任何在该页面上的操作都会直接展现给用户。
但我们还需要另一个DC,这个DC就是离屏页面,对该页面的操作不会直接展出给用户,所有绘图操作都必须在该页面上进行。
不要说你已经提供了一个,你所写的memDC只是个局部DC,作用微乎其微,甚至可能还会使效率下降。
离屏DC应该是与你的CImage的对象的生命周期相同,通常的实现就是为你的CImage添加两个成员:
CDC m_offscreenDC; CBitmap m_offscreenBitmap;,
在你的CImage构造时就初始化好m_offscreenBitmap和m_offscreenDC,剩下的就是,
所有的绘图操作都输出只输出到m_offscreenDC上,你的Draw函数只需要一个函数,
那就是BitBlt,只需要简单的把m_offscreenDC上的内容blt到pDC上。。。



0 0
原创粉丝点击