mfc 想让窗体不断重画 程序就死 画面定格不动了
一个单文档mfc应用程序(有view和Doc类)
在菜单里加了一项“运行”,其处理函数,就是引起view类的不断重画
类似
while(--i>0) // i是一个很大的数,如:100000
{
...;
Invalidate(); //这两句就是想让view类重画
UpdateWindow();
}
view类中,onDraw就是画一幅图
当“运行”时,闪烁的非常厉害,十有八九会死掉,
而且,当还在“运行”时,若进行拖动,改变窗体大小,最大化等其它引起重画的操作时,程序基本上会死。
说明:我的程序死是指,在view类窗体上看不到它重画了(不闪烁了),定格在一个画面上。程序内部还是能正常运行。结束后,让窗体重绘一下,最后一次画面是对的(说明程序运行正确)。
所以感觉问题是:程序一直要重绘,OnDraw函数一直被调用,它反应不过来了???
如何让这个重绘过程一直跟上,从而让我看到不断变化的图,不要闪烁的太厉害最好了????
诚望赐教!!!
越详细越好!!!有加分
在菜单里加了一项“运行”,其处理函数,就是引起view类的不断重画
类似
while(--i>0) // i是一个很大的数,如:100000
{
...;
Invalidate(); //这两句就是想让view类重画
UpdateWindow();
}
view类中,onDraw就是画一幅图
当“运行”时,闪烁的非常厉害,十有八九会死掉,
而且,当还在“运行”时,若进行拖动,改变窗体大小,最大化等其它引起重画的操作时,程序基本上会死。
说明:我的程序死是指,在view类窗体上看不到它重画了(不闪烁了),定格在一个画面上。程序内部还是能正常运行。结束后,让窗体重绘一下,最后一次画面是对的(说明程序运行正确)。
所以感觉问题是:程序一直要重绘,OnDraw函数一直被调用,它反应不过来了???
如何让这个重绘过程一直跟上,从而让我看到不断变化的图,不要闪烁的太厉害最好了????
诚望赐教!!!
越详细越好!!!有加分
作者: lsangame 发布时间: 2011-06-16
你好歹用个定时器吧。。。
如果在消息处理函数中用while不返回,会卡死窗口线程的。
如果在消息处理函数中用while不返回,会卡死窗口线程的。
作者: kyotrue 发布时间: 2011-06-16
直接用 OnPaint();
不要用:
Invalidate();
UpdateWindow();
不要用:
Invalidate();
UpdateWindow();
作者: tcbo1982 发布时间: 2011-06-16
想让view类重画,更确切的说想让窗口重画,就必须要对WM_PAINT等相关的消息得到处理,
比较简单的方法,就是增加消息处理: PumpMessage();
比较简单的方法,就是增加消息处理: PumpMessage();
作者: hawk004 发布时间: 2011-06-16
复杂点的话,就是自己写一个线程,后台动态更新界面,而不占用界面主线程!
希望可以帮到你哦!
希望可以帮到你哦!
作者: hawk004 发布时间: 2011-06-16
引用 2 楼 tcbo1982 的回复:
直接用 OnPaint();
不要用:
Invalidate();
UpdateWindow();
直接用 OnPaint();
不要用:
Invalidate();
UpdateWindow();
如何直接用 OnPaint();???
作者: lsangame 发布时间: 2011-06-16
用timer吧,不要用循环
作者: sunshine_msdn 发布时间: 2011-06-16
用timer啊,死循环不死才怪了
作者: shenyi0106 发布时间: 2011-06-16
Invalidate(); 会调用的是Onpaint()函数 你可以把画一幅画的 函数 写在 Onpaint()函数里面
作者: zengsheng2619 发布时间: 2011-06-16