重載WM_CTLCOLORHBRUSH CxxxDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

// TODO: Change any attributes of the DC here
//HWND hWnd=pWnd->GetSafeHwnd ();
//if (hWnd ==控件變量.GetSafeHwnd ())
if(pWnd==&控件變量)
{
pDC->SetBkColor(RGB(0,255,0));
//pDC->SetTextColor (RGB(255,0,0));
}
// TODO: Return a different brush if the default is not desired
return hbr;
}

解决方案 »

  1.   

    HBRUSH CRegdemoDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
        if (nCtlColor==CTLCOLOR_EDIT )
    {
    pDC->SetBkColor(RGB(100,110,100));
            pDC->SetTextColor(RGB(200,120,0,));
        
    }

    // TODO: Return a different brush if the default is not desired
    return hbr;
    }
      

  2.   

    if(pWnd==&控件變量)
    似乎有点问题。
    控件变量指ID还是m_xxx呢?
      

  3.   

    第2个解答也有问题,CTLCOLOR_EDIT是什么?
    界面上有很多edit box,根据每个edit的什么标志能确定
    修改的是它的颜色呢?
      

  4.   

    应该是pWnd ->m_hWnd == m_xxx.m_hWnd
      

  5.   

    **************************
    下面也是根据一个网友提供的方法而作的!********************************
    class MyEdit1 : public CEdit
    {
    // Construction
    public:
    MyEdit1();
    CBrush   m_brBkGround;
        COLORREF m_crBkColor;
        COLORREF m_crTextColor;
    // Attributes
    public:.....
    MyEdit1::MyEdit1()
    {
    m_crTextColor = RGB(0,0,0);
    //::GetSysColor( COLOR_WINDOWTEXT );
        m_crBkColor   = RGB(188,188,188);
        m_brBkGround.CreateSolidBrush( RGB(188,188,188) );
    }......
    MyEdit1 myedit1;
    ..............
    myedit.Create(ES_AUTOHSCROLL|ES_AUTOVSCROLL|ES_LEFT|WS_VISIBLE,
      CRect(10,130,400,155),this,IDC_EDIT1);
    myedit.ModifyStyleEx(0,WS_EX_CLIENTEDGE, SWP_DRAWFRAME);......
     myedit.m_crTextColor = RGB(0,100,0); .....
      

  6.   

    if(pWnd==&控件變量)
    似乎有点问题。
    控件变量指ID还是m_xxx呢?你用ClassWizard定義一個CEdit ID 的變量,如CEidt m_edit_test;
    指m_xxx,不是ID.
      

  7.   

    是不是我没说清楚呢?
    我在对话框加入了controls中的edit box组件,图标是ab|
    普通情况下为白底黑字。
    将它改成只读后变成灰底黑字,字不太明显,于是我想将灰底
    的颜色改掉。
    这就是我的问题,现在有人能帮我解决了吗?
      

  8.   

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

    // TODO: Change any attributes of the DC here
    if (nCtlColor==CTLCOLOR_EDIT)
    {
    pDC->SetBkColor(RGB(255,100,192));
    return hbr;
    }
    // TODO: Return a different brush if the default is not desired
    return hbr;
    }
      

  9.   

    重載WM_CTLCOLOR,msdn上有example
    再不然的话,可以自己写一个以CEdit为基类的类,但这样子会比较麻烦就是。如果你只是要设置背景的话,那没有必要自己写一个类
      

  10.   

    换对话框的颜色,再把edit框的背景模式设为透明就好多了。我就是这样做的