我用vc做一个基于EDIT的编辑框控件,我如何根据ForeColor和BackColor属性来设定控件窗口的背景色和字体颜色啊,试了好多方法都不行,比如OnCtlColor,在OnDraw中也没用呢,这个在哪设定呢?还有怎么动态改变控件窗口的属性呢,比如该修改了Password属性后,让窗口类型添加ES_PASSWORD属性呢,MotifyStyle好像不起作用啊,希望各位能给解释一下,小弟感激不尽啦!!!!!!

解决方案 »

  1.   


    m_redcolor=RGB(255,0,0);                      // 红色
    m_bluecolor=RGB(0,0,255);                     // 蓝色
    m_textcolor=RGB(255,255,255);                 // 白色文本
    m_redbrush.CreateSolidBrush(m_redcolor);      // 红色画刷
    m_bluebrush.CreateSolidBrush(m_bluecolor);    // 蓝色画刷HBRUSH CColorEditBoxDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
    // TODO: Change any attributes of the DC here
    if (pWnd->GetDlgCtrlID() == IDC_EDIT1)//第一个编辑框
       {
    pDC->SetBkColor(m_redcolor);    // 输入文本的的底色
    pDC->SetTextColor(m_textcolor);  // 输入文本的颜色
    hbr = (HBRUSH) m_redbrush;    // 编辑框控件的填充色
    } if (pWnd->GetDlgCtrlID() == IDC_EDIT2)//第二个编辑框
       {
    pDC->SetBkColor(m_bluecolor);    // 输入文本的的底色
    pDC->SetTextColor(m_textcolor);  // 输入文本的颜色
    hbr = (HBRUSH) m_bluebrush;    // 编辑框控件的填充色
    }
    // TODO: Return a different brush if the default is not desired
    return hbr;
    }
      

  2.   

    我用vc做一个基于EDIT的编辑框控件,我如何根据ForeColor和BackColor属性来设定控件窗口的背景色和字体颜色啊,试了好多方法都不行,比如OnCtlColor,在OnDraw中也没用呢,这个在哪设定呢?响应ON_WM_CTLCOLOR()事件,在该函数中添加:
    HBRUSH CXXXXDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

    // TODO: Change any attributes of the DC here
    if(pWnd->GetDlgCtrlID() == IDC_EDIT1)
    {
    pDC->SetTextColor(m_fgcolor);
    pDC->SetBkColor(m_bgcolor);
    }
    // TODO: Return a different brush if the default is not desired
    return hbr;
    }
    m_fgcolor和m_bgcolor为CXXXXDlg类的成员变量用来保存CEdit的前景色和背景色,你改变他们的颜色值以后,只需要Invalidate(TRUE);更新一下Dialog就可以了。
    -----------------------------------------------------------------
    m_edit.ModifyStyle(NULL, ES_PASSWORD);
    m_edit.SetPasswordChar(_T('*'));
    这样就可以了