循环过程中视图刷新不了——追加50分!

来源:百度知道 编辑:UC知道 时间:2024/05/11 03:16:19
我想做一个循环捕捉图片并显示的单文档程序。得到的图片用OnDraw来显示,拖动窗口,希望显示依然正确。
程序大致是这样的:
void MyDoc::Test()
{
//do something...
for(int i; i<nSumNum; i++)
{
while(1)
{
//do something...
[color=#FF0000]捕捉图片[/color]
//计时,时间到跳出
}
[color=#FF0000]刷新View[/color]
//保存图片。
}
}
我尝试用几种方法都不行:
1.UpdateAllViews(NULL);//根本不刷新
2.pView->SendMessage(WM_PAINT);//得到view的指针,然后发送message,根本不刷新
3.pView->OnDraw(pView->GetDC());//强行调用OnDraw,刷新倒是刷新,只是一点击鼠标,就会卡在最后一张刷新出来的图片上。然后直到停止。在界面停止刷新显示的过程中,程序还是在正常执行的。最后在硬盘里可以看到保存的所有图片。

这个问题弄得我很头痛,先谢过大家了!!!帮忙指点不胜感激!

循环计时改到计时器里面做,你这样容易消息阻塞。

UpdateAllViews(NULL)或者其它刷新语句后加一句Sleep(0);,给线程一个执行机会

在循环的时候使用一下类似如下函数:另外,如果消息队列中有多个WM_PAINT消息的话,系统会自动优化合并其中的多项。
void CheckMessageQueue()
{
MSG msg;
while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
if(msg.message==WM_QUIT) return false;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}