比如一个变量value(0-100) 
.value> 50第一自动背景为红色.value <50第2个为红色 
最好提供详细点方法.
我用定时来判断变量.
CMyEditCtrl     myedit3;用定时判断变量,然后 
void CTab4::OnTimer(UINT nIDEvent) 
{
if(value>50)
myedit3.SetBgColor(RGB(255,20,255)); 
}
发现输入框背景颜色改变了,但是中间的输入部分是白色的.有朋友说用
OnCtlColor().来实现.但是需要调用到invalidate()来刷新.
我不想用invalidate().因为这个函数会把整个窗口刷新的.感觉到其他控件都会闪烁的.
(如何只刷新这个控件.不影响其他控件的.)
  如何实现动态改变背景颜色的,期待DX给点方法.

解决方案 »

  1.   

    myedit3.Invalidate就可以啊,呵呵
      

  2.   

    void   CTab4::OnTimer(UINT   nIDEvent)   

    if(value> 50) 
    {
      if (m_hBrush)
      {
         ::DeleteObject(m_hBrush);
         m_color = RGB(255,20,255);
         m_hBrush = CreateSolidBrush(RGB(255,20,255));  
       } 
       myedit3.Invalidate();
    }

    HBRUSH CTab4::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {   HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);   if (pWnd->GetDlgCtrlID() == IDC_MYEDIT)
       {  // Set the text color to red
          pDC->SetBkColor(color );
          hbr = m_hBrush ;
       }   return hbr;
    }
      

  3.   

    if   (m_hBrush) //这个如何定义的?
        { 
      

  4.   

    D:\data\开发语言\VC\test_program\11-4\Tab4.cpp(116) : error C2451: conditional expression of type 'class CBrush' is illegal
    我把CBrush m_hBrush
      

  5.   

    听说用InvalidateRect()可以解决的.但是这个重画范围怎么定.
    请楼上几位高手指点一下.如何运用这个函数的.
      

  6.   

    我这个是输入框的.如何确定的
    现在是用在定时里用 myedit3.Invalidate(); 
    这个方法.
    发现闪烁.
    现在如何才能解决的?
      

  7.   

    CEdit::GetRect 
    void GetRect( LPRECT lpRect ) const;
    在CEdit中有一个函数可以得到它的区域大小的。
      

  8.   

    或者你可以用GetWindowRect也可以那个CEdit的Rect大小,然后用invalidaterect。