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毫秒