我在CView类的OnPaint()函数里进行图形绘制,调用自己写的一个线程,线程中的图形绘制主要利用DrawImage()函数,绘制图形成功。但是如果拖动一个对话框到该图形上,图形会闪烁的非常厉害,我在OnEraseBKGrond()函数里已经返回了FALSE,没有解决该问题,大家有没有什么好的方法??

解决方案 »

  1.   

    刷新过于频繁,采用invalidate()后刷新处理.
      

  2.   

    OnEraseBKGrond()函数应该返回TRUE
      

  3.   


    正解。直接返回true可以防止不必要的重画。
      

  4.   

    正解。直接返回true可以防止不必要的重画。
      

  5.   

    我试过了,在我的程序里是不行的,不管返回的是TRUE还是FALSE都不行
      

  6.   

    Bitmap bmp( 1024, 768 );
    Graphics g( &bmp );
    g.DrawImage( pimg, 0, 0 );
    //把要显示的内容都加在这儿。 CPaintDC dc(this); // device context for painting
    Graphics gx( dc );
    gx.DrawImage( &bmp, 0, 0 );试试吧,一点也不闪了。
      

  7.   

    7楼的大哥,这句代码g.DrawImage( pimg, 0, 0 ); 是不是有问题啊,pimg是什么??
      

  8.   

    7楼利用的也是双缓冲的原理  但是那张bmp创建了全屏可能有些浪费资源 pimg是Image*指针 
      

  9.   

    Image img( "aaa.jpg" );
    Bitmap bmp( 1024, 768 ); 
    Graphics g( &bmp ); 
    g.DrawImage( &img, 0, 0 ); 
    //把要显示的内容都加在这儿。 CPaintDC dc(this); // device context for painting 
    Graphics gx( dc ); 
    gx.DrawImage( &bmp, 0, 0 );这样就是比较完整的代码了。在vc++.net 2003 上测试通过。楼上的朋友说的对,要根据实际情况进行优化处理,效率更高。
      

  10.   


      
    *****************************************************************************
    欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码) http://feiyun0112.cnblogs.com/
      

  11.   

    在接收重绘消息(类似WM_PAINT)的地方绘图,否则必然会闪。MFC许久不看了,没猜错的话应该是On_Paint之类的回调函数里面。
      

  12.   

    不好意思,没看清问题~~~~~>_<如果是调用另一个线程来画,有否有考虑过线程同步的问题?因为你拖一个对话框在上面,将引发反复调用On_Paint函数。此时若没有必要的同步保护(至少要有图形生成保护)就会闪。因为有可能绘制的是没有生成完全的图像。