用MFC写小游戏的问题 20
建立了一个基于对话框的MFC程序,使用SetTimer来定时,在OnTimer中调用Invalidate,然后在OnPaint中绘图,这样感觉刷新太快时屏幕会闪烁,有没有...
建立了一个基于对话框的MFC程序,使用SetTimer来定时,在OnTimer中调用Invalidate,然后在OnPaint中绘图,这样感觉刷新太快时屏幕会闪烁,有没有更好的办法?
展开
展开全部
1. 如何绘图的工作量比较多,建议先建立内存DC,然后在内存中画图,画图之后,最后调用BitBilt将图形直接复制到屏幕上。
2. 闪烁还有一个原因是刷新了对话框背景,如果你的绘图代码中,有绘制背景的代码,那么在WM_ERASEBACKGROUND的消息响应函数直接返回TRUE,代表该消息你已经处理,不需要再调用基类的函数来处理,基类函数会把对话框的背景刷成默认的灰色。另外,简单的办法是Invalidate(FALSE),参数指明不要重画背景。
3. 如果绘图面积很大,而你每次改动的部分很小,可以用InvalidateRect函数来指定哪部分区域需要画图,在OnPaint中,调用CDC::GetClipBox获得这个区域,其他的区域不需要进行绘图操作。
2. 闪烁还有一个原因是刷新了对话框背景,如果你的绘图代码中,有绘制背景的代码,那么在WM_ERASEBACKGROUND的消息响应函数直接返回TRUE,代表该消息你已经处理,不需要再调用基类的函数来处理,基类函数会把对话框的背景刷成默认的灰色。另外,简单的办法是Invalidate(FALSE),参数指明不要重画背景。
3. 如果绘图面积很大,而你每次改动的部分很小,可以用InvalidateRect函数来指定哪部分区域需要画图,在OnPaint中,调用CDC::GetClipBox获得这个区域,其他的区域不需要进行绘图操作。
展开全部
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询