HOWTO: Change the Background Color of an MFC Edit Control
ID: Q117778
|
The information in this article applies to:
-
The Microsoft Foundation Classes (MFC), included with:
-
Microsoft Visual C++ for Windows, 16-bit edition, versions 1.0, 1.5, 1.51, 1.52
-
Microsoft Visual C++, 32-bit Editions, versions 1.0, 2.0, 2.1, 4.0, 4.1, 4.2, 5.0, 6.0
SUMMARY
To change the background color of an edit control in an MFC application,
you must override the OnCtlColor() message-handling function of the window
containing the edit control.
In the new OnCtlColor() function, set the background color and return a
handle to a brush that will be used for painting the background. This must
be done in response to receiving both the CTLCOLOR_EDIT and CTLCOLOR_MSGBOX
messages in the OnCtlColor() function.
This is also documented in the "Class Library Reference" under
CWnd::OnCtlColor().
MORE INFORMATION
The sample code below uses a CDialog-derived class to demonstrate the
process. Class Wizard was used to generate message-handling functions for
the WM_CTLCOLOR and WM_DESTROY messages. These functions are called
CEditDialog::OnCtlColor() and CEditDialog::OnDestroy(), respectively.
Sample Code
// editdlg.h : header file
//
////////////////////////////////////////////////////////////////////////
///
// CEditDialog dialog
class CEditDialog : public CDialog
{
// Construction
public:
CEditDialog(CWnd* pParent = NULL); // standard constructor
// Add a CBrush* to store the new background brush for edit controls.
CBrush* m_pEditBkBrush;
// Dialog Data
//{{AFX_DATA(CEditDialog)
enum { IDD = IDD_EDITDIALOG };
// NOTE: The ClassWizard will add data members here.
//}}AFX_DATA
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CEditDialog)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
// Generated message map functions
//{{AFX_MSG(CEditDialog)
afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
afx_msg void OnDestroy();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
// editdlg.cpp : implementation file
//
#include "stdafx.h"
#include "mdi.h"
#include "editdlg.h"
#ifdef _DEBUG
#undef THIS_FILE
static char BASED_CODE THIS_FILE[] = __FILE__;
#endif
//////////////////////////////////////////////////////////////////////
// CEditDialog dialog
CEditDialog::CEditDialog(CWnd* pParent /*=NULL*/)
: CDialog(CEditDialog::IDD, pParent)
{
//{{AFX_DATA_INIT(CEditDialog)
// NOTE: The ClassWizard will add member initialization here.
//}}AFX_DATA_INIT
// Instantiate and initialize the background brush to black.
m_pEditBkBrush = new CBrush(RGB(0, 0, 0));
}
void CEditDialog::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CEditDialog)
// NOTE: The ClassWizard will add DDX and DDV calls here.
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CEditDialog, CDialog)
//{{AFX_MSG_MAP(CEditDialog)
ON_WM_CTLCOLOR()
ON_WM_DESTROY()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
//////////////////////////////////////////////////////////////////////
// CEditDialog message handlers
HBRUSH CEditDialog::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
switch (nCtlColor) {
case CTLCOLOR_EDIT:
case CTLCOLOR_MSGBOX:
// Set color to green on black and return the background
brush.
pDC->SetTextColor(RGB(0, 255, 0));
pDC->SetBkColor(RGB(0, 0, 0));
return (HBRUSH)(m_pEditBkBrush->GetSafeHandle());
default:
return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
}
}
void CEditDialog::OnDestroy()
{
CDialog::OnDestroy();
// Free the space allocated for the background brush
delete m_pEditBkBrush;
}
Additional query words:
CEdit
Keywords : kbcode kbMFC KbUIDesign kbVC kbVC100 kbVC150 kbVC151 kbVC200 kbVC410 kbVC420 kbVC500 kbVC600
Version : 1.0 1.5 1.51 2.0 4.1 4.2 5.0 6.0
Platform : WINDOWS
Issue type : kbhowto