如何更改MFC按钮的背景色

2025-02-26 09:28:29
推荐回答(1个)
回答1:

通过重绘CButton类。

主要思路:先把按钮属性OwerDraw设置成true

然后覆写CButton类的DrawItem虚函数。

 void CCustomButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
CRect rect;
GetClientRect(rect);
CDC dc;
dc.Attach(lpDrawItemStruct->hDC);

UINT state = lpDrawItemStruct->itemState;

        //绘制处于焦点的按钮 
COLORREF colorFocus(RGB(0, 128, 0));
CPen penFocus(PS_DASHDOTDOT, 2, colorFocus);
CBrush brushFocus;
        
         //绘制普通按钮  
COLORREF color(RGB(0, 128, 255));
CPen pen(PS_DASHDOTDOT, 2, RGB(0, 128, 255));
CBrush brush;
if ((state & ODS_SELECTED) || (state & ODS_FOCUS)) {
brushFocus.CreateSolidBrush(colorFocus);
dc.SelectObject(&brushFocus);
dc.SelectObject(&penFocus);
dc.FillSolidRect(rect,m_bgColor);
dc.RoundRect(rect, CPoint(20, 20));
} else {
brush.CreateSolidBrush(color);
dc.SelectObject(&brush);
dc.SelectObject(&pen);
dc.FillSolidRect(rect, m_bgColor);
dc.RoundRect(rect, CPoint(20, 40));
}

CString strText;
GetWindowText(strText);
dc.SetBkMode(TRANSPARENT);
dc.SetTextColor(m_textColor);
    
        // 绘制不可按的按钮  
COLORREF colorDisable(RGB(128, 128, 128));
CBrush brushDisable;
brushDisable.CreateSolidBrush(colorDisable);
CPen penDisable(PS_DASHDOTDOT, 2, colorDisable);
if (state & ODS_DISABLED) {
dc.SelectObject(penDisable);
dc.SelectObject(brushDisable);
dc.RoundRect(rect, CPoint(20, 40));
}
dc.SetTextColor(RGB(255, 255, 255));
dc.DrawText(strText, rect, DT_CENTER | DT_SINGLELINE | DT_VCENTER);
dc.Detach();
}