不知道怎么回事!麻烦啊。我在OnPaint里也添加了CtrlColor这个函数,也是上不了色!如果做一个按扭,然后单击是可以换到色,但一最小化之后又不见了。或者一填文件后又不见了。
void CLCDTestDlg::CtrlColor() 
{
// TODO: Add your control notification handler code here
CWnd *pWnd;
pWnd=GetDlgItem(IDC_EDIT);
CDC *pDC=pWnd->GetDC();
CRect rect;
pWnd->GetClientRect(&rect);
pDC->FillSolidRect(&rect,RGB(255,255,0));
m_FullDlg.m_Color=RGB(255,255,0);
}

解决方案 »

  1.   

    要改变控件的背景颜色,响应OnCtlColor消息就可以了if(pWnd->GetDlgItemId()==IDC_EDIT)
    {
       pDC->SetBkMode(TRANSPARENT);
       return ::CreateSolidBrush(RGB(255,255,0));
    }
      

  2.   

    我想可能是你的程序OnPaint时,先执行了CtrlColor(),然后再画的空间,所以你上不了色而做个按扭点击据可以,最小化之后又不见了。你把CtrlColor()放到 OnPaint函数的最后一句去执行试一下^_^
      

  3.   

    1楼的GetDlgItemId()函数应该改成GetDlgCtrlID()吧.
      

  4.   

    响应的是这个消息ON_WM_CTLCOLOR();
    HBRUSH CLoginDlg::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(223,238,255));
    hbr = m_brush;  //m_brush是背景画刷,定义成颜色RGB(223,238,255)
    }
    // TODO:  Return a different brush if the default is not desired
    return hbr;
    }
      

  5.   

    你的OnPaint是对话框的Onpaint他所绘制的区域只限与对话框,你设置的颜色被EDIT控件挡住了,如果要设置EDIT的颜色可以采用楼上的办法,也可以通过自己继承CEdit自己写类的办法,不过拦截OnCtlColor消息是最简单的。你可以通过一下代码测试被遮住的情况,希望有所启发:
    CWnd *pWnd;
        pWnd=GetDlgItem(IDC_EDIT1);
        CDC *pDC=pWnd->GetDC();
        CRect rect(0,0,100,100);
       // pWnd->GetClientRect(&rect);    pDC->FillSolidRect(&rect,RGB(255,255,0));
      

  6.   

    控件的颜色修改要响应OnCtrlColor啊