最近学习写一个程序,其中一个基本的操作就是图像的水平移动,我采用了双缓冲和ScrollDC来解决这个问题.
在内存DC上先用ScrollDC把图像移动后在拷贝到屏幕上,对于ScrollDC这个函数,我理解并不深,所以现在的问题是,移动图像后,原先图像的位置还有图像,我不知道这个问题是因为ScrollDC使用的问题,还是那个区域还需要更新重画?如果解决这个问题?如果是需要更新重画,就要计算需要更新的区域,再用更新矩形区域的函数InvalidateRect来重画,这里还有一个问题,这个过程是怎样的,是否是调用Ondraw函数绘图,最后把需要更新的区域拷贝到屏幕上?如果是这样,那么如果绘图很费时间,那么不是无论更新小的区域还是更新大的区域,至少Ondraw都要画一遍吧,唯一的区别就是拷贝到屏幕的大小,这么一来更新的效率不是太低了?综上所述,两个问题
第一:ScrollDC移动矩形过程中,如何更新原先位置的图像。
第二:InvalidateRect()函数是怎样的工作过程?因为MFC里面的绘图操作大都在Ondraw中完成,Ondraw里面可能会有复杂的绘图操作,当图像变化时,更新某个区域的操作究竟是怎样完成的?如果按照我上面的理解,那效率岂不是太低了。请大家指点!
在内存DC上先用ScrollDC把图像移动后在拷贝到屏幕上,对于ScrollDC这个函数,我理解并不深,所以现在的问题是,移动图像后,原先图像的位置还有图像,我不知道这个问题是因为ScrollDC使用的问题,还是那个区域还需要更新重画?如果解决这个问题?如果是需要更新重画,就要计算需要更新的区域,再用更新矩形区域的函数InvalidateRect来重画,这里还有一个问题,这个过程是怎样的,是否是调用Ondraw函数绘图,最后把需要更新的区域拷贝到屏幕上?如果是这样,那么如果绘图很费时间,那么不是无论更新小的区域还是更新大的区域,至少Ondraw都要画一遍吧,唯一的区别就是拷贝到屏幕的大小,这么一来更新的效率不是太低了?综上所述,两个问题
第一:ScrollDC移动矩形过程中,如何更新原先位置的图像。
第二:InvalidateRect()函数是怎样的工作过程?因为MFC里面的绘图操作大都在Ondraw中完成,Ondraw里面可能会有复杂的绘图操作,当图像变化时,更新某个区域的操作究竟是怎样完成的?如果按照我上面的理解,那效率岂不是太低了。请大家指点!
解决方案 »
- HOOK函数
- 如何用VC开发一个支持FLV格式的播放器!!!大侠们有何高见
- 关于GetPrivateProfileString
- 一个类中枚举型变量用到的操作符重载(operator++)
- 请教:COM+的经典书籍是哪几本,谢谢???
- DLG绘制时,如何不让它绘制MIN,MAX,CLOSE按扭.............在线等..
- 寻VC比较厉害的人物,交个朋友,互相切磋。
- 串口初始化问题
- 如何得到NT/2000系统中正在运行的进程的cpu使用情况、虚拟内存使用情况?(VC6)
- create ListCtrl-head 添加新表头后无法显示
- View间互相操作的问题,请大家帮看一眼
- 指导一下阿!!
看看这个,或许对你有帮助