PersonalCorpus 版 (精华区)
发信人: Sun (大灯泡), 信区: VisualC
标 题: Re: OnDraw()的屏幕闪动问题???(转载)
发信站: 哈工大紫丁香 (2000年12月03日10:44:14 星期天), 站内信件
闪烁产生的原理是这样的:
通常画图都是先涂背景色,然后再画上面的线条、图形等。
当重画时,必然要先显示完全的背景色,然后再是其余线条、图形,这样就闪烁了
解决方法是在内存绘图,把背景和线条都画到一个内存位图上,再把位图
直接显示出来,这样就没有闪烁过程了。
【 在 ljpxu (小宝) 的大作中提到: 】
: 要在对话框上作画,
: 先把图形作在内存里,
: 似乎解决不了闪烁问题(只不过作了一次延迟,并非双缓存).
: 你的方法和下面的方法差不多吧:
: 每次将图形延迟5秒钟,再画到对话框上.
: 请shark将问题讲明白了先,在什么情况下出现闪烁?
: 是在控建上画图吗?
: 【 在 liujq (真鸟无名) 的大作中提到: 】
: : 技术内幕里有很详细的介绍。
: : 仔细看看。
: : int width = bm.bmWidth;
: : int height = bm.bmHeight;
: : m_rectMem = CRect(0,0,width,height);
: : CClientDC dc(m_pWnd);
: : m_pWnd->GetClientRect(m_rectWnd);
: : m_point.x=(m_rectWnd.Width ()-m_rectMem.Width ())/2;
: : m_point.y=(m_rectWnd.Height()-m_rectMem.Height())/2;
: : // 生成兼容DC与Bitmap
: : m_dcMem.CreateCompatibleDC(&dc);
: : m_bitmapMem.CreateCompatibleBitmap(&dc,m_rectMem.Width(),m_rectMem.Height());
: : m_dcMem.SelectObject(&m_bitmapMem);
--
如果程序员懂得了软件工程,
那么他就不再是牛,
更不是妓女了。
知道中国软件业为什么落后吗?
忽视软件工程,中国软件业将永远落后下去...
※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: sunner.hit.edu.cn]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:4.003毫秒