您的位置:程序门 -> .net技术 -> vc.net



[mfc]求救,对话框上的图片控件闪烁问题!


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


[mfc]求救,对话框上的图片控件闪烁问题![已结贴,结贴人:woodcheaper]
发表于:2007-04-13 09:20:41 楼主
一个基于对话框的mfc程序。  
有一个cstatic类,用来放置图片。  
本来显示得好好的,但是中途因为处理的需要,给cstatic加了一个计数器。在settimer函数执行的瞬间,图片框就会闪烁一下,即使ontimer函数里什么也不干也会这样。  
这是什么原因?只在settimer的时候闪烁一下,以后也不闪了。。。
发表于:2007-04-13 10:51:481楼 得分:20
双缓冲技术应该能解决你这个问题
cdc   memdc;   //首先定义一个显示设备对象
cbitmap   membitmap;//定义一个位图对象  

//随后建立与屏幕显示兼容的内存显示设备
memdc.createcompatibledc(null);
//这时还不能绘图,因为没有地方画   ^_^
//下面建立一个与屏幕显示兼容的位图,至于位图的大小嘛,可以用窗口的大小
membitmap.createcompatiblebitmap(pdc,nwidth,nheight);

//将位图选入到内存显示设备中
//只有选入了位图的内存显示设备才有地方绘图,画到指定的位图上
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.deleteobject();
memdc.deletedc();  

你看看行不行
发表于:2007-04-13 11:15:382楼 得分:0
我用的也是双缓冲
在cstatic的onpaint()函数中
::bitblt(dc.m_hdc,0,0,m_width,m_height,m_hmemdc_blend,0,0,srccopy);
发表于:2007-04-13 11:16:253楼 得分:0
其它时候绘图都是不闪的,就是settimer的时候闪!
发表于:2007-04-13 13:30:294楼 得分:0
找到问题所在了,是我的程序中多了一个意外的postmessage(wm_paint,null,null)语句,之前一直没注意到。。。

还是很谢谢pretty_love,给你分~~~


快速检索

最新资讯
热门点击