case 2:
  {   CClientDC dc(this);
  CPen pen;
  pen.CreatePen(PS_DOT,3,RGB(255,0,0));
  dc.SelectObject(&pen);
  dc.SelectStockObject (NULL_BRUSH);
  for(int j=0; j<26; j++)
  dc.Rectangle(rect[j]);
             
  CPen odp;
  odp.CreatePen(PS_DOT,3,RGB(0,255,0));
  dc.SelectObject(&odp);
  dc.SelectStockObject (NULL_BRUSH);
  for(j=0; j<26; j++)
  dc.Rectangle(rect[j]);
  }
大家好。我准备做一个长方形闪烁效果。。
这些代码都是在定时器中的。
但是执太快。只能看到后面的颜色。
我在中间加一个SLEEP()才可以
可以SLEEP会让主线程卡。。
请问还有没有别的方法实现?

解决方案 »

  1.   

    定时器中加个变量判断:
      static BOOL bFlash = FALSE;  CClientDC dc(this); 
      CPen pen; 
      if (bFlash)
      {
        pen.CreatePen(PS_DOT,3,RGB(255,0,0)); 
      }
      else
      {
        pen.CreatePen(PS_DOT,3,RGB(0,255,0)); 
      }
      CPen* penOld = dc.SelectObject(&pen); 
      dc.SelectStockObject(NULL_BRUSH);
      for(int j=0; j <26; j++) 
        dc.Rectangle(rect[j]); 
      dc.SelectObject(penOld);
      pen.DeleteObject();
      bFlash = !bFlash;
      

  2.   

    谢谢你们。呵呵。可以了。主要是采用duyanbin_sy 的方法。不过wltg2001 大哥的提议也可以。谢谢你们。学到不少东西。
      

  3.   

    Mackz 大哥。。实在对不起。我刚才结贴时。你可以还没发。实在不好意思。我这也没分了。
    谢谢你!