Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Categories

Welcome to the new platform of Programmer's Heaven! We apologize for the inconvenience caused, if you visited us from a broken link of the previous version. The main reason to move to a new platform is to provide more effective and collaborative experience to you all. Please feel free to experience the new platform and use its exciting features. Contact us for any issue that you need to get clarified. We are more than happy to help you.

Background color of edit control

Hi to all,
May i know how can i change the background color of an edit control using a clicked button? I got the OnCtlColor function as shown below, but i'm not sure on how to call this function(OnCtlColor) from my clicked button.
Your help is greatly appreciated. Thanks.

//////////////////////////////////////////////////////////////////
HBRUSH CTestDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
CEdit * pEdit = (CEdit *)GetDlgItem(IDC_EDIT1);

if(nCtlColor == CTLCOLOR_EDIT && pEdit->GetSafeHwnd() == pWnd->GetSafeHwnd())
{
pDC->SetBkMode(TRANSPARENT);
pDC->SetTextColor(RGB(255,255,255));
return m_Brush;
}
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
return hbr;
}
//////////////////////////////////////////////////////////////////

Comments

  • weiccoweicco Posts: 950Member
    : Hi to all,
    : May i know how can i change the background color of an edit control using a clicked button? I got the OnCtlColor function as shown below, but i'm not sure on how to call this function(OnCtlColor) from my clicked button.
    : Your help is greatly appreciated. Thanks.
    :
    : //////////////////////////////////////////////////////////////////
    : HBRUSH CTestDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
    : {
    : CEdit * pEdit = (CEdit *)GetDlgItem(IDC_EDIT1);
    :
    : if(nCtlColor == CTLCOLOR_EDIT && pEdit->GetSafeHwnd() == pWnd->GetSafeHwnd())
    : {
    : pDC->SetBkMode(TRANSPARENT);
    : pDC->SetTextColor(RGB(255,255,255));
    : return m_Brush;
    : }
    : HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
    : return hbr;
    : }
    : //////////////////////////////////////////////////////////////////
    :
    :

    You don't call this function. Controls send WM_CTLCOLOR message to parent control, when they want to be colored. MFC catches that message and calls OnCtlColor-method.

    But if I remember correctly, I was unable to get those messages on parent dialog so I derived custom edit class from CEdit and handled WM_CTLCOLOR myself using message reflection (ON_WM_CTLCOLOR_REFLECT). Like this:

    [code]
    class CMyEdit : public CEdit {
    protected:
    HBRUSH CtlColor(CDC*, UINT);
    DECLARE_MESSAGE_MAP()
    };

    BEGIN_MESSAGE_MAP(CMyEdit, CEdit)
    ON_WM_CTLCOLOR_REFLECT()
    END_MESSAGE_MAP()

    HBRUSH CMyEdit::CtlColor(CDC *pDC, UINT nCtlColor)
    {
    pDC->SetTextColor(RGB(255, 0, 0));
    pDC->SetBkColor(RGB(0, 255, 0));

    return (HBRUSH)GetStockObject(YELLOW_BRUSH);
    }
    [/code]
Sign In or Register to comment.