MFC双缓冲画图

MFC双缓冲画图

ID:38179451

大小:19.81 KB

页数:3页

时间:2019-05-24

MFC双缓冲画图_第1页
MFC双缓冲画图_第2页
MFC双缓冲画图_第3页
资源描述:

《MFC双缓冲画图》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、双缓冲的意思就是先将图画在内存中,然后再一次拷贝显示到屏幕上,没啥神秘的画图一般是在OnPaint中画:C/C++codeCPointptCenter;CRectrect,ellipseRect;GetClientRect(&rect);ptCenter=rect.CenterPoint();CDCdcMem;//用于缓冲作图的内存DCCBitmapbmp;//内存中承载临时图象的位图dcMem.CreateCompatibleDC(pDC);//依附窗口DC创建兼容内存DC(就是一个内存DC,所有图形先画在上面)bmp.CreateCompatibleBitmap(pDC,r

2、ect.Width(),rect.Height());//创建兼容位图dcMem.SelectObject(&bmp);//将位图选择进内存DC//按原来背景填充客户区,不然会是黑色dcMem.FillSolidRect(rect,pDC->GetBkColor());for(inti=20;i>0;i--)//在内存DC上做同样的同心圆图象{ellipseRect.SetRect(ptCenter,ptCenter);ellipseRect.InflateRect(i*10,i*10);dcMem.Ellipse(ellipseRect);}pDC->BitBlt(0,0,r

3、ect.Width(),rect.Height(),&dcMem,0,0,SRCCOPY);//将内存DC上的图象拷贝到前台MFC双缓冲绘图2008-03-2513:46如何避免闪烁    在知道图形显示闪烁的原因之后,对症下药就好办了。首先当然是去掉MFC提供的背景绘制过程了。实现的方法很多,  *可以在窗口形成时给窗口的注册类的背景刷付NULL  *也可以在形成以后修改背景staticCBrushbrush(RGB(255,0,0));SetClassLong(this->m_hWnd,GCL_HBRBACKGROUND,(LONG)(HBRUSH)brush);  *要简

4、单也可以重载OnEraseBkgnd(CDC*pDC)直接返回TRUE    这样背景没有了,结果图形显示的确不闪了,但是显示也象前面所说的一样,变得一团乱。怎么办?这就要用到双缓存的方法了。双缓冲就是除了在屏幕上有图形进行显示以外,在内存中也有图形在绘制。我们可以把要显示的图形先在内存中绘制好,然后再一次性的将内存中的图形按照一个点一个点地覆盖到屏幕上去(这个过程非常快,因为是非常规整的内存拷贝)。这样在内存中绘图时,随便用什么反差大的背景色进行清除都不会闪,因为看不见。当贴到屏幕上时,因为内存中最终的图形与屏幕显示图形差别很小(如果没有运动,当然就没有差别),这样看起来就不

5、会闪。如何实现双缓冲    首先给出实现的程序,然后再解释,同样是在OnDraw(CDC*pDC)中:CDCMemDC;//首先定义一个显示设备对象CBitmapMemBitmap;//定义一个位图对象//随后建立与屏幕显示兼容的内存显示设备MemDC.CreateCompatibleDC(NULL);//这时还不能绘图,因为没有地方画^_^//下面建立一个与屏幕显示兼容的位图,至于位图的大小嘛,可以用窗口的大小MemBitmap.CreateCompatibleBitmap(pDC,nWidth,nHeight);   //将位图选入到内存显示设备中//只有选入了位图的内存显

6、示设备才有地方绘图,画到指定的位图上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.D

7、eleteObject();MemDC.DeleteDC();BOOLCDataStructureView::OnEraseBkgnd(CDC*pDC)  {     CRectrc;     CDCdcMem;     GetClientRect(&rc);     CBitmapbmp;//内存中承载临时图象的位图         dcMem.CreateCompatibleDC(pDC);//依附窗口DC创建兼容内存DC     //创建兼容位图(必须用pDC创建,否则画出的图形变成黑

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。