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






1.95/5 (13 votes)
Jun 11, 2001

181795

4687
Change the back color of an edit box to yellow when it gets the focus, and back to white when it loses the focus.
Introduction
This article shows how to change the back color of an edit box when it gets the focus.
- Derive a class from the standard edit control class,
CEdit
. - 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
- A
- 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; }
- 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 }
- 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())); }