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中呢
展开
 我来答
bhtzu
2014-10-31 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8088
采纳率:85%
帮助的人:4204万
展开全部
你是用断点确认的进不去OnTimer么?

你这个是OpenGL的吧,理论上,这个绘图应该不影响定时器,定时器是消息空闲类事件,只要有消息环空闲,那么触发就没问题,你这个是不是画起来没完,窗口的各个消息都没反应呢?
追问

断点 和 messagebox我都试了。

好像是画起来没完,但是我也就是

这样画了一些圆柱和圆而已。。


这要怎么改才行?

追答
要怎么改,看你要实现什么了。
如果是希望做“绘制动画”,那么这个不能放到OnDraw里面,OnDraw是每次刷新(包括窗口最小化或覆盖后的还原)都要调用的。
如果只是因为绘制的慢,而每次只需要绘制之后的东西,那么用内存dc吧。

因为不清楚你定时器具体目的是什么,不好说合理的修改建议。记得你是要Invalidate触发重绘?这个应该没有必要啊,你将定时器设置为3000毫秒试试,另外定时器里面只做运算先看看断点是否触发。
另外,这个“画起来没完”是没有道理的,你先去掉SetTimer语句看看,是否还是没完。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式