改变EDIT控件的背景颜色

解决方案 »

  1.   

    应该是映射WM_CTCOLOR消息,然后得到控件ID,再用SetBkColor()吧
      

  2.   

    同意tjuzhangrui() 
      加入 消息 WM_CTCOLOR,更改颜色
      

  3.   

    http://www.enet.com.cn/eschool/inforcenter/A20040506307010.html
      

  4.   

    你好象问了好多界面的问题哦 
    利用WM_CTLCOLOR消息实现Edit Control的文本与背景色的改变首先要明白:WM_CTLCOLOR是一个由控制(Control)发送给它父窗口的通知消息(Notification message)。实现步骤:
    生成一个标准的单文档应用程序框架,假设应用程序的名称为Color。我将利用它的About对话框做示范。在About dialog中添加两个Edit control,设定其ID为IDC_EDIT1与IDC_EDIT2。第一种方法(对应于IDC_EDIT1): 按照标准的Windows编程,由其父窗口的消息处理函数负责处理WM_CTLCOLOR消息。1. 在CAboutDlg中添加一个数据成员:HBRUSH m_brMine;
    2. 利用向导映射AboutDlg的WM_CTLCOLOR消息,产生函数:HBRUSH CAboutDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
    pDC是AboutDlg的设备上下文,pWnd是AboutDlg中发送该消息的control指针,nCtlColor市Control的类型编码。对其进行如下修改:HBRUSH CAboutDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
      if ((pWnd->GetDlgCtrlID() == IDC_EDIT1) && (nCtlColor == CTLCOLOR_EDIT))
      {
          COLORREF clr = RGB(255,0,0);
          pDC->SetTextColor(clr);   //设置红色的文本
          clr = RGB(0,0,0);
          pDC->SetBkColor(clr);     //设置黑色的背景
          m_brMine = ::CreateSolidBrush(clr);
          return m_brMine;  //作为约定,返回背景色对应的刷子句柄
      }
      else
      {
          HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
          return hbr;
      }
    }第二种方法(对应于IDC_EDIT2): 
    利用MFC 4.0的新特性: Message reflection。1.利用向导添加一个新的类:CColorEdit,基类为CEdit;
    2.在CColorEdit中添加一个数据成员: HBRUSH m_bkBrush;
    3.利用向导映射CColorEdit的"=WM_CTLCOLOR"消息,产生函数:HBRUSH CColorEdit::CtlColor(CDC* pDC, UINT nCtlColor); 对其进行如下修改:HBRUSH CColorEdit::CtlColor(CDC* pDC, UINT nCtlColor) 
    {
      COLORREF clr = RGB(0,0,0);
      pDC->SetTextColor(clr);   //设置黑色的文本
      clr = RGB(255,0,0);
      pDC->SetBkColor(clr);     //设置红色的背景
      m_bkBrush = ::CreateSolidBrush(clr);
      return m_bkBrush;  //作为约定,返回背景色对应的刷子句柄
    }4.利用向导为IDC_EDIT2生成一个数据成员CColorEdit m_coloredit;
    5.在定义CAboutDlg的color.cpp文件中加入:#include "coloredit.h" 
     
     
      

  5.   

    自CEdit派生一个类,重写OnEraseBkgnd方法
      

  6.   

    在设置edit控件的dialog类中重载OnCtlColor。
    在其中加入:
    if (pWnd==GetDlgItem(IDC_YOUREDIT))
    {
                 pDC->SetBkMode(TRANSPARENT);
                 pDC->SetTextColor(RGB(0,255,0));
                 CBrush YourBrush;
                 MyBrush.CreateSolidBrush(RGB(0,128,128));
                 hbr=(HBRUSH)MyBrush.GetSafeHandle();

    最后
    return hbr;