循环过程中视图刷新不了——追加50分!
我想做一个循环捕捉图片并显示的单文档程序。得到的图片用OnDraw来显示,拖动窗口,希望显示依然正确。程序大致是这样的:voidMyDoc::Test(){//dosom...
我想做一个循环捕捉图片并显示的单文档程序。得到的图片用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,刷新倒是刷新,只是一点击鼠标,就会卡在最后一张刷新出来的图片上。然后直到停止。在界面停止刷新显示的过程中,程序还是在正常执行的。最后在硬盘里可以看到保存的所有图片。
这个问题弄得我很头痛,先谢过大家了!!!帮忙指点不胜感激! 展开
程序大致是这样的:
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,刷新倒是刷新,只是一点击鼠标,就会卡在最后一张刷新出来的图片上。然后直到停止。在界面停止刷新显示的过程中,程序还是在正常执行的。最后在硬盘里可以看到保存的所有图片。
这个问题弄得我很头痛,先谢过大家了!!!帮忙指点不胜感激! 展开
3个回答
展开全部
在循环的时候使用一下类似如下函数:另外,如果消息队列中有多个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);
}
}
void CheckMessageQueue()
{
MSG msg;
while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
if(msg.message==WM_QUIT) return false;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
UpdateAllViews(NULL)或者其它刷新语句后加一句Sleep(0);,给线程一个执行机会
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
循环计时改到计时器里面做,你这样容易消息阻塞。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询