| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 437 人关注过本帖
标题:求助,MFC使用双缓存解决闪烁的问题
只看楼主 加入收藏
lileimt
Rank: 2
等 级:论坛游民
威 望:1
帖 子:14
专家分:88
注 册:2012-9-20
结帖率:25%
收藏
已结贴  问题点数:1 回复次数:3 
求助,MFC使用双缓存解决闪烁的问题
我创建了MFC单文档,在OnEraseBkgnd内设置为return true;我在自己写了一个函数实现双缓存绘制背景图在ondraw里调用,如何在使用双缓存绘制其他的图,而不会刷新背景图?
搜索更多相关主题的帖子: 其他 return 如何 
2013-03-04 16:38
yuccn
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:1 
使用双缓存绘制其他的图??你怎么分什么是其他图?

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-03-04 16:47
lileimt
Rank: 2
等 级:论坛游民
威 望:1
帖 子:14
专家分:88
注 册:2012-9-20
收藏
得分:0 
我想另外将图绘制到背景上面,要不停的绘制,所以不用双缓存会闪屏,用的话,就会将背景刷成白色了
这是我的绘制背景的代码,我现在想再写个函数实现双缓存,画其他的内容
void CRadarView::DrawBkMap(void)                                   //绘制图片
{
    CDC *pDC = this->GetDC();
    CDC MemDC; //首先定义一个显示设备对象
    CBitmap MemBitmap;//定义一个位图对象
    MemDC.CreateCompatibleDC(NULL);                    //随后建立与屏幕显示兼容的内存显示设备
    MemBitmap.CreateCompatibleBitmap(pDC,rect.Width(),rect.Height());
    CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap);
    MemDC.FillSolidRect(0,0,rect.Width(),rect.Height(),RGB(255,255,255));
//////////////////////////////绘背景图//////////////////////////////////////////
    CDC dcCompatible;
    dcCompatible.CreateCompatibleDC(&MemDC);
    HBITMAP OldBitmap = (HBITMAP)dcCompatible.SelectObject(&bitmap);
    MemDC.StretchBlt(xPos,yPos,m_Width,m_Height,&dcCompatible,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);          //放置图片
    dcCompatible.SelectObject(&OldBitmap);
    ReleaseDC(&dcCompatible);            //释放资源,防止内存泄露不断增长
///////////////////////////绘图片边框/////////////////////////////////////////////////   
    CPen pen;
    pen.CreatePen(PS_SOLID,3,RGB(0,0,0));   
    MemDC.SelectObject(&pen);
    CBrush *pBrush = CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
    MemDC.SelectObject(pBrush);
    MemDC.Rectangle(xPos,yPos,xPos+m_Width,yPos+m_Height);    //图片边框
//////////////////////////////////////将内存中的图贴到屏幕上////////////////////////////////////////////
    pDC->BitBlt(0,0,rect.Width(),rect.Height(),&MemDC, 0, 0, SRCCOPY);
    MemBitmap.DeleteObject();
    MemDC.DeleteDC();
    ReleaseDC(pDC);
}
2013-03-04 16:58
lileimt
Rank: 2
等 级:论坛游民
威 望:1
帖 子:14
专家分:88
注 册:2012-9-20
收藏
得分:0 
回复 2楼 yuccn
我想另外将图绘制到背景上面,要不停的绘制,所以不用双缓存会闪屏,用的话,就会将背景刷成白色了
这是我的绘制背景的代码,我现在想再写个函数实现双缓存,画其他的内容
void CRadarView::DrawBkMap(void)                                   //绘制图片
{
    CDC *pDC = this->GetDC();
    CDC MemDC; //首先定义一个显示设备对象
    CBitmap MemBitmap;//定义一个位图对象
    MemDC.CreateCompatibleDC(NULL);                    //随后建立与屏幕显示兼容的内存显示设备
    MemBitmap.CreateCompatibleBitmap(pDC,rect.Width(),rect.Height());
    CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap);
    MemDC.FillSolidRect(0,0,rect.Width(),rect.Height(),RGB(255,255,255));
//////////////////////////////绘背景图//////////////////////////////////////////
    CDC dcCompatible;
    dcCompatible.CreateCompatibleDC(&MemDC);
    HBITMAP OldBitmap = (HBITMAP)dcCompatible.SelectObject(&bitmap);
    MemDC.StretchBlt(xPos,yPos,m_Width,m_Height,&dcCompatible,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);          //放置图片
    dcCompatible.SelectObject(&OldBitmap);
    ReleaseDC(&dcCompatible);            //释放资源,防止内存泄露不断增长
///////////////////////////绘图片边框/////////////////////////////////////////////////   
    CPen pen;
    pen.CreatePen(PS_SOLID,3,RGB(0,0,0));   
    MemDC.SelectObject(&pen);
    CBrush *pBrush = CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
    MemDC.SelectObject(pBrush);
    MemDC.Rectangle(xPos,yPos,xPos+m_Width,yPos+m_Height);    //图片边框
//////////////////////////////////////将内存中的图贴到屏幕上////////////////////////////////////////////
    pDC->BitBlt(0,0,rect.Width(),rect.Height(),&MemDC, 0, 0, SRCCOPY);
    MemBitmap.DeleteObject();
    MemDC.DeleteDC();
    ReleaseDC(pDC);
}
2013-03-04 17:28
快速回复:求助,MFC使用双缓存解决闪烁的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015893 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved