Click here to Skip to main content
Licence 
First Posted 10 Jun 2001
Views 144,991
Bookmarked 46 times

How to change the back color of an edit box when it gets the focus

By | 10 Jun 2001 | Article
Change the back color of an edit box to yellow when it gets the focus, and back to white when it loses the focus.

Sample Image - CEditBkColor.gif

Introduction

This article shows how to change the back color of an edit box when it gets the focus.

  1. Derive a class from the standard edit control class, CEdit.
  2. Add 3 private variables:
    • A COLORREF to store the current back color
    • A CBrush to store the brush used to paint the back color of the edit control
    • A CString to store the current contents of the edit box
  3. Override the virtual OnChildNotify function.
    BOOL CMyEdit::OnChildNotify(UINT message, 
        WPARAM wParam, LPARAM lParam, LRESULT* pLResult)
    {
        // We only want to handle WM_CTLCOLOREDIT messages - 32 bit only
        if (message != WM_CTLCOLOREDIT) 
        {
            return CEdit::OnChildNotify(message, wParam, lParam, pLResult);
        }
        HDC hdcChild = (HDC)wParam;
        // Text is black – you can modify this by adding
        // another variable for text color
        SetTextColor(hdcChild, RGB(0,0,0));
        SetBkColor(hdcChild, m_BackColor);
        return TRUE;
    }
  4. Add message handlers to handle the following Windows messages:
    • ON_WM_SETFOCUS
    • ON_WM_KILLFOCUS
    • ON_WM_PAINT
    void CMyEdit::OnSetFocus(CWnd* pOldWnd)
    {
        CEdit::OnSetFocus(pOldWnd);
    
        m_BackColor = RGB(255,255,0);
        Invalidate(FALSE);
    }
    
    void CMyEdit::OnKillFocus(CWnd* pNewWnd)
    {
        CEdit::OnKillFocus(pNewWnd);
        // I am setting normal back color to white
        // – you can modify this as you see fit
        m_BackColor = RGB(255,255,255);
        // Force a repaint
        Invalidate(FALSE);
    }
    void CMyEdit::OnPaint()
    {
        CPaintDC dc(this); // device context for painting
    
        // TODO: Add your message handler code here
        GetWindowText(m_Text);
        SetBkGrndColor();
    
        // Do not call CEdit::OnPaint() for painting messages
    }
    
  5. Add a private member function SetBkGrndColor()
    void CMyEdit::SetBkGrndColor()
    {
        // Delete the old brush
        m_Brush.DeleteObject();
        // Create a new brush in the specified color
        m_Brush.CreateSolidBrush(m_BackColor);
        CDC* pDC = GetDC();
        pDC->SetBkMode(OPAQUE);
        pDC->SetBkColor(m_BackColor);
        // Select the brush into this window’s device context
        pDC->SelectObject(&m_Brush);
        CRect rc;
        // Get the client area of the edit control
        GetClientRect(&rc);
        ScreenToClient(&rc);
        // Apply the device context to the client area of the edit control
        pDC->Rectangle(0, 0, rc.Width(), rc.Height());
        // Rewrite the text since the backcolor paint
        // overwrote the existing text
        pDC->SetTextColor(RGB(0, 0, 0,));
        pDC->TextOut(2, 2, m_Text.GetBuffer(m_Text.GetLength()));
    }

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

About the Author

Warren J. Hebert

Web Developer

United States United States

Member

I am a Visual Basic, Visual C++ programmer (consultant) with 6 years experience. I am also an instructor and have been teaching Visual Basic and Visual C++ at a local community college for the past 15 months.

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
You must Sign In to use this message board. (secure sign-in)
 
Search this forum  
 FAQ
    Noise  Layout  Per page   
  Refresh
Generalin my opinion... PinmemberCho,Dae-Wan7:46 27 Mar '04  
Questionhow to change the color of an edit box Pinmemberbhanusiva6:04 29 Jan '04  
AnswerRe: how to change the color of an edit box Pinmemberihoapm20:36 23 Dec '04  
GeneralSeems to work without CMyEdit::OnPaint Pinmemberchris10923:55 16 Dec '03  
GeneralThis article is just cut-n-paste from MSDN Q132080 PinPopularmemberip21:05 30 Oct '03  
GeneralRe: This article is just cut-n-paste from MSDN Q132080 PinmemberDean Bathke18:19 4 Feb '05  
GeneralChanging the Selection Color within the control PinmemberChandra Birusumanti8:47 12 Aug '03  
GeneralQuestion about CEdit PinmemberAlex Bikov8:46 1 Feb '02  
Hello
Can I change the Text Color of individual Words in the Multiline CEdit text?
And how can I catch the mouse Click event and return the clicked word in the text (without selection)
 
Can you help me please?
 

GeneralProblems PinmemberChristian Graus13:28 11 Nov '01  
GeneralRe: Problems PinmemberJames R. Twine8:16 4 Jan '02  
GeneralRe: Problems PinmemberChristian Graus10:50 4 Jan '02  
GeneralRe: Problems PinmemberJames R. Twine11:01 4 Jan '02  
GeneralRe: Problems PinmemberChristian Graus11:10 4 Jan '02  
GeneralRe: Problems TN062 Pinmemberosy1:28 8 Apr '03  
GeneralMore options PinmemberKant9:05 16 Jun '01  

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Mobile
Web02 | 2.5.120528.1 | Last Updated 11 Jun 2001
Article Copyright 2001 by Warren J. Hebert
Everything else Copyright © CodeProject, 1999-2012
Terms of Use
Layout: fixed | fluid