为控件设置背景颜色
1.为控件所在对话框的类添加CBrush类型的变量,例如m_Brush;
在该对话框的构造函数中,创建一个画刷,例如:
CDeleteFace::CDeleteFace(CWnd* pParent )
: CDialog(CDeleteFace::IDD, pParent)
{
//{{AFX_DATA_INIT(CDeleteFace)
m_edit1 = _T("");
//}}AFX_DATA_INIT
m_brush.CreateSolidBrush(RGB(200,230,190));
}
为该对话框添加OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 函数:
在OnCtlColor中添加如下代码:
if (pWnd->GetDlgCtrlID()==IDC_EDIT1||pWnd->GetDlgCtrlID()==IDC_STATIC)
{
pDC->SetBkMode(TRANSPARENT);
return m_brush;
}
即可完成对控件的颜色设置!
2.上述方法对Button控件不适用;可用以下方法为Button控件设置背景:
为工程添加类CSXBtn,基类为CButton,为CSXBtn添加虚函数DrawItem(),完成对Button控件背景、字体颜色的设置;
代码如下:
void CSXBtn::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
UINT uStyle = BS_DEFPUSHBUTTON ;//DFCS_BUTTONPUSH;
// This code only works with buttons.
ASSERT(lpDrawItemStruct->CtlType == ODT_BUTTON);
// If drawing selected, add the pushed style to DrawFrameControl.
if (lpDrawItemStruct->itemState & ODS_SELECTED)
uStyle |= DFCS_PUSHED;
// Draw the button frame.
::DrawFrameControl(lpDrawItemStruct->hDC, &lpDrawItemStruct->rcItem,
DFC_BUTTON, uStyle);
CDC* pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
// Get the button's text.
CString strText;
GetWindowText(strText);
// Draw the button text using the text color red.
CBrush B;
CRect rect;
CRect focusRect;
focusRect.CopyRect(&lpDrawItemStruct->rcItem);
DrawFocusRect(lpDrawItemStruct->hDC, (LPRECT)&focusRect);
focusRect.left += 4;
focusRect.right -= 4;
focusRect.top += 4;
focusRect.bottom -= 4;
rect.CopyRect(&lpDrawItemStruct->rcItem);
pDC->Draw3dRect(rect, ::GetSysColor(COLOR_BTNSHADOW), ::GetSysColor(COLOR_BTNHILIGHT));
B.CreateSolidBrush(RGB(200,230,190));
::FillRect(lpDrawItemStruct->hDC,&rect, (HBRUSH)B.m_hObject);
::SetBkMode(lpDrawItemStruct->hDC,TRANSPARENT);
COLORREF crOldColor = ::SetTextColor(lpDrawItemStruct->hDC, RGB(0,0,0));
::DrawText(lpDrawItemStruct->hDC, strText, strText.GetLength(),
&lpDrawItemStruct->rcItem, DT_SINGLELINE|DT_VCENTER|DT_CENTER);
::SetTextColor(lpDrawItemStruct->hDC, crOldColor);
}
将Button控件属性中“所有者绘制”选中,并为控件添加变量,变量类型为CSXBtn;即可!