我现在想实现的是,在初始话的时候,编辑框不添加背景颜色,但是当编辑框里输入非法数据时,弹出错误信息之后,让它背景色变红。
网上的大部分都是初始化的颜色添加,写在OnCtlColor事件里,但是如果是上面写的这种情况,怎么处理?
欢迎高手指教~~

解决方案 »

  1.   

    在OnCtlColor事件中添加如下代码,可以改变编辑控件的背景色.
    例如
    1. 检查是否是要改变的控件.
       pWnd->GetDlgCtrlID() == 控件ID名.
    2. 创建一个背景色.
       COLORREF backColor = RGB(216, 231, 252);
    3. 设置背景为透明色.
       pDC->SetBkMode(TRANSPARENT); 
    4. 最后返回背景刷子.
       return CreateSolidBrush(backColor);
      

  2.   

    参考下下面这段代码吧,之前我用过的:
    ................................................................HBRUSH CVdserverDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);// TODO: Change any attributes of the DC hereif(nCtlColor==CTLCOLOR_LISTBOX)
    {
    //pDC->SetBkMode(TRANSPARENT);
    pDC->SetTextColor(RGB(0,0,0));
    pDC->SetBkColor(RGB(233,233,220));
    HBRUSH b=CreateSolidBrush(RGB(233,233,220));
    return b;
    }
    else if(nCtlColor==CTLCOLOR_SCROLLBAR)
    {
    pDC->SetTextColor(RGB(0,0,0));
    HBRUSH b=CreateSolidBrush(RGB(200,210,225));
    return b;
    }
    else if(nCtlColor==CTLCOLOR_EDIT)
    {
    pDC->SetTextColor(RGB(0,0,0));
    HBRUSH b=CreateSolidBrush(RGB(200,210,225));
    return b;
    }
    else if(nCtlColor==CTLCOLOR_STATIC)
    {
    pDC->SetBkMode(TRANSPARENT);
    pDC->SetTextColor(RGB(0,0,0));
    HBRUSH b=CreateSolidBrush(RGB(200,210,225));
    return b;
    }
    else if(nCtlColor==CTLCOLOR_DLG)
    {
    pDC->SetTextColor(RGB(0,0,0));
    HBRUSH b=CreateSolidBrush(RGB(200,210,225));
    return b;
    }
    return hbr;
    }
      

  3.   

    可以先设置一个全局变量 
    BOOL m_colorchange;
    if ((pWnd->GetDlgCtrlID() == IDC_STATIC_STATUS))
    {
       if (m_colorchange)
          {
     pDC->SetTextColor(RGB(0,255,0));
           }
          else
          {
            pDC->SetTextColor(RGB(0,0,0));

           }
            pDC->SetBkMode(TRANSPARENT);

      }