双缓冲加重载onpaint,OnEraseBkgnd解决屏幕闪烁问题

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

近来发现用vc做ui真是一件非常痛苦的事情,微软有了C#这个新欢就不要vc这旧爱了.

只能自己动手了.

自己实现了按钮切换背景功能后,正暗自爽的我发现了一个很严重的问题.背景切换时总是先出现mfc自带的灰色难看界面才刷出我用form image控件载入的图片.上网google了很久.总算是解决我自己的问题.

分三步走:

第一, 在OnInitDialog中写入

//----------------- 载入背景图
 if( m_bmp.m_hObject != NULL )//判断
  m_bmp.DeleteObject();
 /////////载入图片
 HBITMAP hbmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),
  "res//aaaaa.BMP", IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION|LR_LOADFROMFILE);
 if( hbmp == NULL )
  return FALSE;
 ///////////////////////该断程序用来取得加载的BMP的信息////////////////////////
 m_bmp.Attach( hbmp );
 DIBSECTION ds;
 BITMAPINFOHEADER &bminfo = ds.dsBmih;
 m_bmp.GetObject( sizeof(ds), &ds );
 int cx=bminfo.biWidth;  //得到图像宽度
 int cy=bminfo.biHeight; //得到图像高度
 /////////////////// ////////////////////////////////
 /////////////得到了图像的宽度和高度后,我们就可以对

设置了背景图,但是第一次hover会闪烁,该如何解决????? 铁打的营盘流水的兵 当下有这么一个需求,鼠标经过图片的时候,切换显示的图片 思索许久,倒也有了那么两三个解决方案 方案一、动态切换显示的组件 方案二、动态切换背景图的路径 基于以上的两种方案,分别给个简单的????: 方案一: html: <div>鼠标经过,切换背景图</div> <comp1 v-if="isHover" :imgSrc="isHover? imgSrc1 :imgSrc2" /> <comp1 v-else :imgSrc="isHove 阅读详情

相关推荐

背景图片切换实现轮播效果,并解决抖动问题

应用场景 页面需要做持续性图片切换的效果。考虑到页面的性能消耗,采用css3控制一张sprite背景图切换来实现效果。 部分代码展示 这里是一个宽高比2:1的图片 .want-club { position: relative; width: 36%; height: 0; padding-bottom: 36%; background-imag

jocchoc的博客 7354

关于OnEraseBkGnd函数以及屏闪问题解决

问题是这样产生的.在OnEraseBkGnd中,如果你不调用原来缺省的OnEraseBkGnd只是重画背景则不会有闪烁.而在OnPaint里面,由于它隐含的调用了OnEraseBkGnd,而你又没有处理OnEraseBkGnd函数,这时就和窗缺省的背景刷相关了.缺省的OnEraseBkGnd操作使用窗的缺省背景刷刷新背景(一般情况下是白刷),而随后你又自己重画背景造成屏幕闪动.另外一个问题是O

wiserstar的专栏 1536

[VB.NET]切换窗屏幕闪烁问题

<!--google_ad_client = "pub-8333940862668978";/* 728x90, 创建于 08-11-30 */google_ad_slot = "4485230109";google_ad_width = 728;google_ad_height = 90;//--><script type="text/javascript"

VB.NET学习网-VB.NET实例、VB.NET教程、VB.NET源码下载 2288

当鼠标移入时切换背景图时闪烁问题

当页面第一次加完成时,鼠标移入时需要切换的背景图还未被加过,本地没有这张图片,所以切换的时候回出现闪烁的情况,我们可以在一个地方先把这张图放下,但是不让它显示出来,这样当我们第一次加完页面时需要切换的背景图也就加完了,我们再将鼠标移入时切换背景图也就不会再闪烁了,但是这种方式并不适合所有的情况,如果我们需要切换的图片过多时,这样就会时页面加时的压力过大,造成浏览器的负担,只需要...

weixin_30888027的博客 684

c# panel背景图片切换闪烁解决办法

代码如下:重绘panel,并在新panel的构造函数中,设置双缓冲即可; public partial class BackGroundPanel : Panel { public BackGroundPanel() { SetStyle(ControlStyles.UserPaint | ControlStyles.AllPa

wzk456的专栏 4640

图片做背景切换时闪烁

图片做背景,在切换时会重新加图片,所以第一次会出现闪烁的情况,后面在切换时,由于图片已经加,所以不会出现闪烁解决办法:将这两张图拼成一张图,通过定位来实现图片的切换。...

extendworld的博客 2583

解决闪烁的主要方法

<br /> 一.基本概念<br />CClientDC, CPaintDC都是从CDC派生出来的类。<br />两者的区别有:<br />1.ClientDC的构造函数执行执行GetDC, 析构函数执行ReleaseDC;CPaintDC的构造函数执行BeginPaint  析构函数执行EndPaint  <br />2.CClientDC不会使无效矩形区域变为有效,而CPaintDC会无效矩形变为有效。<br />如下代码:<br /> <br />void CDemoDlg::OnPaint()<br

C++ 永无止境 3179

解决Winform背景图片闪烁问题

       Winform窗体,里面放置了一个Panel,Dock属性为Fill,BackgroundImage使用一个本地图片文件,BackgroundImageLayout使用了Stretch。嵌入图片的Panel作为Winform应用程序的背景,这个界面现在有两个问题:1、在窗体第一次被打开时,背景图片会出现明显的闪烁2、在拉动窗体的边界以调整窗体大小时,背景图片非出现明显的闪烁  解决方...

已被格式化的叔叔 7163

background-image 属性改变时 会出现闪烁现象,以及解决办法

在做一个新需求,音乐播控button 焦点样式和非焦点样式是两幅小图片。 想着用background-image 来实现。 移动焦点时切换background-image属性就可以了。做出来demo后才发现 当第一次切换属性 时 会出现闪烁现象,非第一次就不会出现闪烁现象。 从显示看应该非第一次用到了图片缓存问题,所以就不会出现闪烁现象了。demo如下: .div1_default{...

liubangbo的专栏 5570

如何解决绘图过程中的闪烁

<br />在VC中进行绘图过程处理时,如果图形刷新很快,<br />经常出现图形闪烁的现象。利用先在内存绘制,然后<br />拷贝到屏幕的办法可以消除屏幕闪烁,具体的方法是先在内存<br />中创建一个与设备兼容的内存设备上下文,也就是开辟一快内<br />存区来作为显示区域,然后在这个内存区进行绘制图形。在绘制完成后利用<br />BitBlt函数把内存的图形直接拷贝到屏幕上即可。<br />具体的代码实现为:<br /><br />(1)创建内存区域<br />CDC* pMem=new CDC;  

liguoqing19861028的专栏 1452

VB.net 图片刷新闪烁 解决方案

解决图片刷新闪烁可使能DoubleBuffering 将以下代码插入 Public Sub EnableDoubleBuffering() ' Set the value of the double-buffering style bits to true. Me.SetStyle(ControlStyles.DoubleBuffer _ Or Contr...

MAGDB的博客 2485

OnEraseBkgnd(CDC *pDC)

/*  float fsp[2];  POINT Newp; //获取现在对话框的大小  CRect recta;   GetClientRect(&recta);     //取客户区大小  Newp.x=recta.right-recta.left;  Newp.y=recta.bottom-recta.top;  fsp[0]=(float)Newp.x/Old.x;  f

Laughing Gor 1031

经验总结之防止窗闪烁的方法

1、将Invalidate()替换为InvalidateRect()。    因为Invalidate()会导致整个窗的图象重画,需要的时间比较长,而InvalidateRect()仅仅重画Rect区域内的内容,所需时间会少一些。所以替换之后在很大程度上会减少闪烁。如果你确实需要改善闪烁的情况,计算一个Rect所用的时间比起重画那些不需要重画的内容所需要的时间要少得多。 2、不要让系统擦

雪松软件开发的专栏 1215

OnPaint()函数的作用原理

自:http://blog.sina.com.cn/s/blog_4b3c1f950100dmhm.html WM_PAINT是窗每次重绘都会产生的一个消息。OnPaint是对这个消息的反应函数mfc 的 CWnd::OnPaint 没做什么,只是丢给系统处理。一 :先执行OnEraseBkgnd,擦除背景(如果想自绘控件,这个函数直接return TRUE就可以了,这样就不

轩辕一水 的专栏 1978

从最小化返回后directshow播放画面刷新地疑难

 http://www.qqgb.com/Program/VC/VCJQ/Program_176331.html  大家好,我的程序是这样的:一个dialog里面有个picture   control,   用来做directshow的频播放。 开始播放后画面会出来,一切正常。现在的问题是,当此dialog最小化,再恢复时,频画面一闪而过变成了picture   control的底

天外流星 1578

解决双缓存仍然闪烁问题

MFC中,使用双缓存仍然闪烁。 窗在擦除背景时,会造成闪烁,即便使用双缓存。 因此,频繁重绘时 一、Invalidate()函数,参数应为false,传true则会擦除背景。 二、窗响应WM_ERASEBKGND消息,返回 NULL,而不是默认的CDialog::OnEraseBkgnd(pDC);也可解决问题

ryanbanks的专栏 1308

如何使用 GDI+ 双缓冲 解决绘图闪烁问题

 这几日要用C#做一个简单的图形处理工具.但刚开始就遇见一个头疼的问题.图片用鼠标移动时闪烁很明显,使用双缓冲解决这个问题,对图形处理有经验的人都能想到.    现在的问题是很多人不知道怎么怎么使用GDI+ 双缓冲,我从网上搜到很多资料,加上手里的一本书也介绍了一两页,就这样我依然被折磨了整整一天,就在要崩溃前我终于搞明白.本来很简单的东西按照网上的还是书上的方法怎么试都不行!这到底

HUNTER_HZ的专栏 4575
上一篇: no data exchange control with ID的解决方法
下一篇: 主界面设计+自定义按钮实现tab控件功能
husoso
博客等级 码龄20年 16粉丝 111原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值