mfc 想让窗体不断重画 程序就死 画面定格不动了

一个单文档mfc应用程序(有view和Doc类)
在菜单里加了一项“运行”,其处理函数,就是引起view类的不断重画
类似
while(--i>0) // i是一个很大的数,如:100000
{
  ...;
  Invalidate(); //这两句就是想让view类重画
  UpdateWindow();
}

view类中,onDraw就是画一幅图
当“运行”时,闪烁的非常厉害,十有八九会死掉,
而且,当还在“运行”时,若进行拖动,改变窗体大小,最大化等其它引起重画的操作时,程序基本上会死。

说明:我的程序死是指,在view类窗体上看不到它重画了(不闪烁了),定格在一个画面上。程序内部还是能正常运行。结束后,让窗体重绘一下,最后一次画面是对的(说明程序运行正确)。
所以感觉问题是:程序一直要重绘,OnDraw函数一直被调用,它反应不过来了???
如何让这个重绘过程一直跟上,从而让我看到不断变化的图,不要闪烁的太厉害最好了????
诚望赐教!!!
越详细越好!!!有加分

作者: lsangame   发布时间: 2011-06-16

你好歹用个定时器吧。。。

如果在消息处理函数中用while不返回,会卡死窗口线程的。

作者: kyotrue   发布时间: 2011-06-16

直接用 OnPaint();
不要用:
Invalidate(); 
UpdateWindow();

作者: tcbo1982   发布时间: 2011-06-16

想让view类重画,更确切的说想让窗口重画,就必须要对WM_PAINT等相关的消息得到处理,
比较简单的方法,就是增加消息处理: PumpMessage();

作者: hawk004   发布时间: 2011-06-16

复杂点的话,就是自己写一个线程,后台动态更新界面,而不占用界面主线程!


希望可以帮到你哦!

作者: hawk004   发布时间: 2011-06-16

引用 2 楼 tcbo1982 的回复:
直接用 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