如何应用VC进行位图的光滑滚动

edwardlj 2000-07-25 08:53:00
我在使用传统的方式时,当使用滚动条进行滚动时,位图闪烁的厉害,不知那些商业软件是如何作到光滑的滚动的呢?请各位高手指教。先谢过了。
...全文
231 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
flyingknight 2000-08-05
  • 打赏
  • 举报
回复
你可以先申请一块能容纳整个屏幕大小或你需要显示区域大小的位图的内存区域....不必每次释放它的,当你要载入的时候,直接填充啊...最后不用了的时候在释放.....
wangdx 2000-08-05
  • 打赏
  • 举报
回复
hugos:
能否说的详细点,我编了一个显示大位图的程序:采用小内存装入位图,映射到屏幕dc,用detach释放该内存,再载入位图,再映射,如此反复,可很快就内存溢出,不知如何才能正确释放内存及位图对象(在多次反复的创建过程中)?
hugos 2000-08-03
  • 打赏
  • 举报
回复
对于巨大的位图可以采用分块的方法调入内存。说白了,就是矩阵的分块移动
shines77 2000-08-03
  • 打赏
  • 举报
回复
是否要像VB里的AutoRedraw一样,要设为True才行,不知有没有类似设置。
不过看样子softsprite说的比较对。
wangdx 2000-08-02
  • 打赏
  • 举报
回复
各位有没有想过,要是位图很大,比如尺寸为(800,100000)时内存DC如何能承受?
wt007 2000-07-28
  • 打赏
  • 举报
回复
同意softsprite的方法。
唯此才是正确途径!
Areslee 2000-07-27
  • 打赏
  • 举报
回复
在用INVALIDATERECT函数刷新屏幕时把参数设为FALSE
U皮特U 2000-07-25
  • 打赏
  • 举报
回复
避免刷新闪烁的方法主要是用内存缓冲法,即先在内存中进行绘制工作,完成后再拷贝到屏幕上,这样绘制过程就不会显示出来造成闪烁了。这是通常使用的方法。
大致过程如下:
CDC dcMem;
dcMem.CreateCompatibleDC( NULL );
dcMem.SetBkMode( TRANSPARENT );
然后在dcMem进行绘制工作,完成后用BitBlt函数将dcMem中的内容拷贝到屏幕的DC中即可
westaf 2000-07-25
  • 打赏
  • 举报
回复
位图的闪烁是因为默认的OnEraseBackground执行了一个用背景色擦除窗口的操作。要想避免闪烁,只要继承一下OnEraseBackground,并简单的返回true就可以了。

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧