我绘制了一个立方体,想要它不停地转动,OnTimer 函数如下:(在OnDraw()函数中
已经包含了绘制物体的函数DrawScene()).void CLesson06View::OnTimer(UINT nIDEvent) 
{

       switch(nIDEvent) {
       case 0:
    break;
       case 1:
             xrot += 0.8f;
    yrot += 0.8f;
    zrot += 0.8f;
    Invalidate(FALSE);

    break;

        }

}即使调用了OnEraseBkgnd()函数,图形闪得仍非常厉害:BOOL CLesson06View::OnEraseBkgnd(CDC* pDC) 
{
// TODO: Add your message handler code here and/or call default

       return TRUE;
}请问有什么方法可以解决?

解决方案 »

  1.   

    Invalidate(FALSE);
    换成
    RedrawWindow(NULL, NULL, RDW_INVALIDATE | RDW_UPDATENOW);可以试试============================================================================
    提问题时标题要简明扼要地说明问题内容,切忌使用"急","求救"之类不能说明问题的标题
    http://alphasun.betajin.com/   遇到问题可以给我发消息,给我发信息时请附带原帖地址
    DocWizard C++程序文档自动生成工具 | Wave OpenGL | HttpProxy | AjaxParser词法分析
      

  2.   

    首先用双缓存技术,并且使用函数SwapBuffers(..)交换前后缓存!
      

  3.   

    我的OnDraw() 函数如下:void CLesson07View::OnDraw(CDC* pDC)
    {
    CLesson07Doc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);

    HWND hWnd = GetSafeHwnd();
    HDC hDC = ::GetDC(hWnd);
    wglMakeCurrent(hDC,hglrc);
    glClearColor(0.0f,0.0f,0.0f,1.0f);
    glClear(GL_DEPTH_BUFFER_BIT| GL_COLOR_BUFFER_BIT);

    DrawScene();    

    wglMakeCurrent(NULL,NULL);
    SwapBuffers(hDC);
    }双缓存技术是不是就是用SwapBuffers()函数?
      

  4.   

    你的ontimer时间间隔是多少,另外在你的时间间隔内,DrawScene()中是否能完成绘制。试试改变一下。
      

  5.   

    双缓存技术不是用了SwapBuffers就可以的你要看看你在设置像素结构的时候
    有没有加上使用双缓存!
      

  6.   

    PIXELFORMATDESCRIPTOR调用ChoosePixelFomat设置该结构的时候第三项要添一个PFD_DOUBLEBUFFER