我要通过一个静态文本框背景颜色的改变现实从外界读取的一个数值的变化。设置了一个计时器,实时刷新从外界获取的数值,当得到的数值是1的时候是一种颜色;当得到的数字是0的时候使静态文本框变成另外一种颜色!不知道这个该怎么写!哪位大侠帮忙,不清楚的可以加我QQ407680523,谢谢了!

解决方案 »

  1.   

    响应WM_CTLCOLOR消息,添加全局变量COLORREF m_color;HBRUSH CtestDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
    {
    HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor); // TODO:  Change any attributes of the DC here
            if(pWnd == GetDlgItem(IDC_STATIC1))
         pDC->SetBkColor(m_color);
    // TODO:  Return a different brush if the default is not desired
    return hbr;
    }在OnTimer事件中用
    CRect rt;
    GetDlgItem(IDC_STATIC1)->GetWindowRect(&rt);
    ScreenToClient(&rt);
    m_color=RGB(123,45,12);//修改颜色
    InvalidateRect(&rt);
      

  2.   

    能不能说详细点,我不知道怎么在一个WM_TIMER消息响应下加入一个WM_CTLCOLOR消息响应,因为我要用计时器隔一段时间判断一下读取的值是多少!如果是从0变成1,或者从1变成0,才要求进行消息响应,才变色的!
      

  3.   

    你不是在WM_TIMER消息响应下加入一个WM_CTLCOLOR消息响应,只是叫你响应一个窗口的WM_CTLCOLOR消息就行了
    在OnTimer事件中用 
    if(key == 1)
    {
    CRect rt; 
    GetDlgItem(IDC_STATIC1)->GetWindowRect(&rt); 
    ScreenToClient(&rt); 
    m_color=RGB(123,45,12);//修改颜色 
    InvalidateRect(&rt);
    }
    if(key == 0)
    {
    CRect rt; 
    GetDlgItem(IDC_STATIC1)->GetWindowRect(&rt); 
    ScreenToClient(&rt); 
    m_color=RGB(45,123,78);//修改颜色 
    InvalidateRect(&rt);
    }
      

  4.   

    楼上意思我解释一下:
    m_color为全局变量
     CtestDlg::OnTimer()
    {
    int flg;
    CRect rt; 
    GetDlgItem(IDC_STATIC1)->GetWindowRect(&rt); 
    ScreenToClient(&rt); if (flg ==1)
    {m_color=RGB(123,45,12);//修改颜色 
    }
    else if (flg ==0)
    {
    m_color=RGB(255,0,0);//修改颜色 }InvalidateRect(&rt);
    }HBRUSH CtestDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 

    HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor); // TODO:  Change any attributes of the DC here 
            if(pWnd == GetDlgItem(IDC_STATIC1)) 
        pDC->SetBkColor(m_color); 
    // TODO:  Return a different brush if the default is not desired 
    return hbr; 

    这样应该就行了