我现在程序要25个红绿灯做指示,我拉了25个picture控件,能正常显示,可是红绿灯灯要变换,当变换时,我用Invalidate()或者UpdateWindow()重绘时,界面抖动的很厉害,请问有什么办法解决这个问题吗?只有35分了。

解决方案 »

  1.   

    哪个picture控件 改了 就 m_pic.Invalidate();
    不要全部。
      

  2.   

    同意1楼,或者InvalidateRect试试
      

  3.   

    用CMemoryDC做双缓冲,就不会闪了。
      

  4.   

    这样还不如用双缓冲bitblt画上去好点
      

  5.   

    25个控件??你初学吧?用CImageList多简单啊
      

  6.   

    比如你有两个图片表示红绿灯
    尺寸为100X100,24位色,低色为黑色
    ID分别是IDB_红灯,IDB_绿灯
    那么:
    第一步,为类建立变量
    CImageLisr  xLight;
    第二步,初始化该变量
    xLight.Create(100,100,ILC_COLOR24|ILC_MASK,1,1);
    CBitmap bmp;
    bmp.LoadBitmap(IDB_红灯);
    xLight.Add(&bmp,RGB(0,0,0));
    bmp.DeleteObject();
    xLight.LoadBitmap(IDB_绿灯);
    bmp.DeleteObject();
    第三步,建立25颗灯的位置变量和状态变量并初始化
    CPoint xSet[25];
    BOOL   xSwitch[25];
    第四步,画灯
    void CXXXX::OnPaint()
    {
       for(int i=0;i<25;i++)
       {
          xLight.Draw(&dc,xSwitch[i],xSet);
       }
    }如果用双缓冲,效果就更好了
      

  7.   

    比如,你要改变第8颗灯
    只需要xSwitch[7]^=1;
    Invalidate();就可以了