MFC settimer的一个问题
做作业时发现一个问题:voidChomeworkOpenGLView::OnDraw(CDC*/*pDC*/){ChomeworkOpenGLDoc*pDoc=GetDo...
做作业时发现一个问题:
void ChomeworkOpenGLView::OnDraw(CDC* /*pDC*/){
ChomeworkOpenGLDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
::glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
RenderScene();//绘图都放在这(主要函数)
::glFinish();
::SwapBuffers( m_pDC->GetSafeHdc() );
}
上面代码会让我的SetTimer进入不了Ontimer中,但是如果我把RenderScene();这一句删除掉就能进去了。RenderScene();是我画图形的一个函数。。。。 请问我这样写为什么会进不了Ontimer中呢 展开
void ChomeworkOpenGLView::OnDraw(CDC* /*pDC*/){
ChomeworkOpenGLDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
::glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
RenderScene();//绘图都放在这(主要函数)
::glFinish();
::SwapBuffers( m_pDC->GetSafeHdc() );
}
上面代码会让我的SetTimer进入不了Ontimer中,但是如果我把RenderScene();这一句删除掉就能进去了。RenderScene();是我画图形的一个函数。。。。 请问我这样写为什么会进不了Ontimer中呢 展开
1个回答
展开全部
你是用断点确认的进不去OnTimer么?
你这个是OpenGL的吧,理论上,这个绘图应该不影响定时器,定时器是消息空闲类事件,只要有消息环空闲,那么触发就没问题,你这个是不是画起来没完,窗口的各个消息都没反应呢?
你这个是OpenGL的吧,理论上,这个绘图应该不影响定时器,定时器是消息空闲类事件,只要有消息环空闲,那么触发就没问题,你这个是不是画起来没完,窗口的各个消息都没反应呢?
追答
要怎么改,看你要实现什么了。
如果是希望做“绘制动画”,那么这个不能放到OnDraw里面,OnDraw是每次刷新(包括窗口最小化或覆盖后的还原)都要调用的。
如果只是因为绘制的慢,而每次只需要绘制之后的东西,那么用内存dc吧。
因为不清楚你定时器具体目的是什么,不好说合理的修改建议。记得你是要Invalidate触发重绘?这个应该没有必要啊,你将定时器设置为3000毫秒试试,另外定时器里面只做运算先看看断点是否触发。
另外,这个“画起来没完”是没有道理的,你先去掉SetTimer语句看看,是否还是没完。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询