基于MFC对话框应用程序
动态改变CStatic控件的颜色,我在类向导里面用了一个Static控件的控制变量,m_no1,写下这样的代码
                  m_no1.GetDC()->SetBkMode(TRANSPARENT);
m_no1.GetDC()->SetBkColor(RGB(255,0,0));
么有效果!!请高手解释一下,另外,怎么达到我的效果呢?5秒钟变一次颜色
另外有人说,在工具栏里面脱出来的Static控件是Active控件?什么意思啊?

解决方案 »

  1.   

    HBRUSH CXXXXDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

      if(pWnd->GetDlgCtrlID()   ==   IDC_STATIC)   
      {   
        static   HBRUSH   hbrEdit   =   ::CreateSolidBrush(m_static_colr);   
        pDC->SetBkColor(RGB(255,   255,   255));   
       
        return   hbrEdit;   
      }   
    // TODO: Return a different brush if the default is not desired
    return hbr;
    }定义一个成员变量m_static_colr表示背景,在定时器里面动态改变颜色值就行了
    在工具栏里面脱出来的Static控件是Active控件?  没有这一说
      

  2.   

    做一个定时器 OnTimer里面响应,刷新控件
    然后OnCtlColor中修改它的颜色
      

  3.   

    工具栏里面拖出来的 Static 控件是普通的 windows 控件设置 Timer,响应 WM_TIMER 消息,改变颜色值OnCtlColor 里设置和修改 Static 控件的画刷
      

  4.   

    也可以用这种方法来实现你颜色的需要
    请参见http://www.xiaohui.com/dev/vccool/static/5.htm
    然后在定时器函数里完成时间的需要。
      

  5.   

    初始化时用SetTimer定时;响应WM_TIMER消息,调用Invalidate刷新控件;响应WM_CTLCOLOR消息,判断是该控件时,调用SetBkColor设置文字背景色,并用所需颜色创建一个画刷返回,其它控件调用CDialog::OnCtlColor并返回。
    注意两点:如果要使用控件ID,不能用IDC_STATIC,可以随便改一下;不要先调用CDialog::OnCtlColor,以免资源泄露。
      

  6.   

    没那么复杂,就是做一个定时器 OnTimer里面响应,刷新控件 
    然后OnCtlColor中修改它的颜色 要调用SetBkColor设置文字背景色,
    方法恨多,看你喜欢什么样子的更适合你,不要看广告,要看疗效。