3037|4

66

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

双缓冲技术 [复制链接]


怎样吧下面一段代码实现双缓冲

  void Bckgnd(HDC h_destDC)
{
        CWnd *                pParent;
        CRect                wndRect;
        int                        width;
        int                        height;
       
        pParent = this->GetParent();
        CDC *pDC = pParent->GetWindowDC();
        GetWindowRect(&wndRect);
        pParent->ScreenToClient(&wndRect);       
        width = wndRect.Width();
        height = wndRect.Height();
        HDC hDC = ::CreateCompatibleDC(NULL);
        ::SelectObject(hDC, m_hBmpBkgnd);       
        ::BitBlt(h_destDC, 0, 0, width, height, hDC, wndRect.left, wndRect.top, SRCCOPY);
        ::DeleteDC(hDC);
}

最新回复

为什么需要双缓冲呢。。你可能还不知道为什么会闪屏 闪屏是因为你肯定刷新了背景,因为刷背景时会用白色来填充,所以再画上去后就有一个过程,背景,白,背景。 这样就会出现闪屏。  因为色差大,所以会觉得闪 而办法就是背景 背景  把OnPaintBackGround 重写, 在缓冲里画好与你要改变的整个图,再画出来,即和背景差不多的图,因为变化不大,所以不觉得闪  详情 回复 发表于 2008-5-21 12:34
点赞 关注

回复
举报

64

帖子

0

TA的资源

一粒金砂(中级)

沙发
 

我做的控件重写了DrawItem,界面刷新特别厉害。为吧实现背景透明,DrawItem函数里面也调用上面函数。请问有没有好的方法避免这种刷新?
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
以前有个帖子说的比较明白
 
 
 

回复

88

帖子

0

TA的资源

一粒金砂(初级)

4
 

  是哪个贴,你还记得不?
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

5
 
为什么需要双缓冲呢。。你可能还不知道为什么会闪屏

闪屏是因为你肯定刷新了背景,因为刷背景时会用白色来填充,所以再画上去后就有一个过程,背景,白,背景。
这样就会出现闪屏。  因为色差大,所以会觉得闪

而办法就是背景 背景  把OnPaintBackGround 重写, 在缓冲里画好与你要改变的整个图,再画出来,即和背景差不多的图,因为变化不大,所以不觉得闪
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表