我想用双缓存解决MFC界面屏幕闪烁的问题,我的代码没有达到效果,请教各位大侠,急急急!!
CDCdcCompatible;CDC*pDC=this->GetDC();CBitmapbitmap;BITMAPbmp;bitmap.LoadBitmap(IDB_B...
CDC dcCompatible;
CDC *pDC = this->GetDC();
CBitmap bitmap;
BITMAP bmp;
bitmap.LoadBitmap(IDB_BITMAP_MAP);
bitmap.GetBitmap(&bmp);
dcCompatible.CreateCompatibleDC(pDC);
HBITMAP OldBitmap = (HBITMAP)dcCompatible.SelectObject(&bitmap);
pDC->StretchBlt(0,0,1366,768,&dcCompatible,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY); //放置图片
dcCompatible.SelectObject(&OldBitmap);
ReleaseDC(&dcCompatible); //释放资源,防止内存泄露不断增长
ReleaseDC(pDC); 展开
CDC *pDC = this->GetDC();
CBitmap bitmap;
BITMAP bmp;
bitmap.LoadBitmap(IDB_BITMAP_MAP);
bitmap.GetBitmap(&bmp);
dcCompatible.CreateCompatibleDC(pDC);
HBITMAP OldBitmap = (HBITMAP)dcCompatible.SelectObject(&bitmap);
pDC->StretchBlt(0,0,1366,768,&dcCompatible,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY); //放置图片
dcCompatible.SelectObject(&OldBitmap);
ReleaseDC(&dcCompatible); //释放资源,防止内存泄露不断增长
ReleaseDC(pDC); 展开
1个回答
展开全部
1·思路反了,内存DC应该在初始化的时候创建并导入位图,所有DC操作要在内存DC上先执行,内存DC应该是类成员变量,不能每次重新创建。
2·双缓冲使用下,应该在OnDraw或者OnPaint里面,只有一条实际语句,就是内存DC到pDC的BitBlt(不能是Stretch,而且正好和你的代码相反,是内存DC到pdc)
2·双缓冲使用下,应该在OnDraw或者OnPaint里面,只有一条实际语句,就是内存DC到pDC的BitBlt(不能是Stretch,而且正好和你的代码相反,是内存DC到pdc)
追问
要怎么改啊,谢谢
追答
改动是在整个工程里面的,不只是一处代码。而且根据实际需要并不相同,从你的代码上看不到实际的具体情况。
至于示例代码,网上太多了,搜“内存DC 双缓冲”会有很多代码,只有看明白了理解了,才能做出适合你实际需要的代码。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询