为何闪烁不停?一个绘背景图的问题,哪位高手给个办法??? 处理WM_ERASEBKGND,直接返回TRUE;CYourView::OnEraseBkgnd( CDC* pDC ){ return TRUE;}试试看吧 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在OnDraw(CDC *pDC)定义一个内存CDC对象MemDC;然后将位图载入MemDC;中用BitBlt(0,0,高度,宽度,&MenDC,0,0,高度,宽度,SRCCOPY);可有效解决闪烁。闪烁原因是因为直接现实位图时pDC图像处理速度跟不上显示器刷新速度(既要实时加载,还要实时现实,而处理图像是很耗费时间的),但当你把处理过程交给MemDC处理,而pDC只负责贴图,速度便能跟上了。 好像用了CDC对象的MemDC重绘时还是会剧烈闪动 tj98zyz(小鸟) 的办法好像只能使显示看上去没有那些白癍,而是变成没有清除的窗口,但还是重绘闪烁啊! dishou(低手) 其实我并不是直接用的CDC,而是在CMyDoc中读出位图后,以后使用DrawDibDraw绘制的。但这样绘制虽然在小图片(800×600)时闪烁还可以接受,但再大了,如4000×3500,就很难接受了,但ACDSEE看这个大图片时就没有这个问题:( 低手说的对,你的绘制方法有问题。只有使用MemDC才能消除闪烁。 Invalidate(FALSE);绘制时不要重画背景 尽管你读图片是在doc中做的,但这种做法只能减少I/O时间,闪烁的原因是通过cdc在显示设备上绘制的时间大于人眼的视觉滞留时间,从而使得人眼能够区别系统的背景擦除和绘制过程。所以laserman(玩家一) 和tj98zyz(小鸟) 的做法能解决背景擦除的问题,但如果图片本身的绘制时间如果很长的话,还是会出现闪烁,所以还需要减少图片的绘制时间,一般的做法是将图片先绘制在一个虚拟设备上,比如memdc,然后将其一次更新到显示设备上。但是在创建memdc时,其宽度和高度是受显示设备分辨率的影响,即不可能创建一个4000*3600的memdc,所以你还需要借鉴scrollview(带滑条的view)的显示做法。 re:arttalk(bear) 其实开始我用的是dishou(低手)说的那种方法,在OnDraw外申请一个CDC对象myDC,LoadBitmap那个超大图片,然后在OnDraw(*pDC)里想用pDC->BitBlt(0,0,h,w,&myDC,0,0,SRCCOPY)显示之(不好意思,照着书上抄的),可是却不能显示。后来放弃了,要不您给俺说说这是什么原因?? 首先你要确定loadBitmap函数已经成功返回,一般如果图片太大的话该函数的调用会失败的。至于pDC->BitBlt的调用,你必须保证myDC里确实有这副图片。结果的检测方法,你可以先显示myDC,如果myDC能正确显示的话,你再从pDC找原因,比如pDC的初始化等等 切换客户区的时候屏幕总闪烁。 DataGrid 隔行变色 调用自编MFC扩展的DLL,在exe的函数中:s2=myDLLF(s1);执行之后,到s3=s2;和s2.freeExtrc();这两个语句会出错,怎样改正呢? 请教,文本拼接问题```` 2个类型转换问题,请教高手指点! 在线等待——怎样才能清空已经画了图形的视图区域,以便继续画其它图形? MFC与标准库(STL) FlyNow进来拿分 关于socket的问题 编译错误几十个个,但是编译成功,程序也正常。。。好奇怪,什么原因? 倒霉的我啊......我的助手到那去了!!!!!!!!!!!!!!!!! 对话框上怎么样显示位图?
定义一个内存CDC对象MemDC;
然后将位图载入MemDC;
中用BitBlt(0,0,高度,宽度,&MenDC,0,0,高度,宽度,SRCCOPY);
可有效解决闪烁。
闪烁原因是因为直接现实位图时pDC图像处理速度跟不上显示器刷新速度(既要实时加载,还要实时现实,而处理图像是很耗费时间的),但当你把处理过程交给MemDC处理,而pDC只负责贴图,速度便能跟上了。
绘制时不要重画背景
其实开始我用的是dishou(低手)说的那种方法,在OnDraw外申请一个CDC对象myDC,LoadBitmap那个超大图片,然后在OnDraw(*pDC)里想用pDC->BitBlt(0,0,h,w,&myDC,0,0,SRCCOPY)显示之(不好意思,照着书上抄的),可是却不能显示。后来放弃了,要不您给俺说说这是什么原因??
至于pDC->BitBlt的调用,你必须保证myDC里确实有这副图片。
结果的检测方法,你可以先显示myDC,如果myDC能正确显示的话,你再从pDC找原因,比如pDC的初始化等等