如何更改MFC按钮的背景色

 我来答
ahcc08
2016-09-21 · 知道合伙人软件行家
ahcc08
知道合伙人软件行家
采纳数:11853 获赞数:51951
拥有丰富的软件开发经验。

向TA提问 私信TA
展开全部

通过重绘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();
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式