Invalidate函数能循环调用吗
1个回答
展开全部
当然可以啊。 一般情况下, 中间最好有个Sleep(多线程)或者是在Timer下调用。
可是,有必要这样吗?
可是,有必要这样吗?
追问
因为我要一次进行多次OnDraw函数的调用,你能给我个实例吗?我循环调用的时候都只能调用一次,它就失效了,这是为什么啊?我就是将Invalidate直接放在for循环中进行的,这样可以不?
追答
一般情况下:
如果是鼠标的话, 可以在鼠标移动后调用 InvalidRect函数。
如果是画图的话,在画图完成后就调用Invalidate函数。
如果是在for循环中调用:非多线程程序中, for循环调用Invalidate函数将使得CPU不断进行计算,而使得程序阻塞(CPU不断占用), 同时, 这样也将是不必要的。 下面的代码是使用TIMER事件的,老实说, 这样不好!
使用事件向导建立WM_TIMER响应及函数。
void COBDT1Dlg::OnTimer(UINT nIDEvent)
{
if(nIDEvent==1)
{
Invalidate();
}
CDialog::OnTimer(nIDEvent);
}
在OnInitDialog中增加:SetTimer(1,1000,NULL); //每1秒调用OnTimer函数一次。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询