动态CButton 更改背景颜色
时间: 2023-12-14 15:39:01 浏览: 41
可以通过设置按钮的背景画刷来改变按钮的背景颜色。具体步骤如下:
1. 在资源编辑器中将按钮的类型设置为 Owner Draw(自绘制)。
2. 在 MFC 应用程序的头文件中添加以下代码:
```cpp
class CDynamicButton : public CButton
{
public:
CDynamicButton();
virtual ~CDynamicButton();
void SetBackgroundColor(COLORREF color);
protected:
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
afx_msg void OnPaint();
DECLARE_MESSAGE_MAP()
private:
COLORREF m_backgroundColor;
CBrush m_backgroundBrush;
};
```
3. 在实现文件中添加以下代码:
```cpp
CDynamicButton::CDynamicButton()
: m_backgroundColor(RGB(255, 255, 255))
{
}
CDynamicButton::~CDynamicButton()
{
}
void CDynamicButton::SetBackgroundColor(COLORREF color)
{
m_backgroundColor = color;
m_backgroundBrush.DeleteObject();
m_backgroundBrush.CreateSolidBrush(m_backgroundColor);
Invalidate();
}
BOOL CDynamicButton::OnEraseBkgnd(CDC* pDC)
{
CRect rect;
GetClientRect(&rect);
pDC->FillRect(&rect, &m_backgroundBrush);
return TRUE;
}
void CDynamicButton::OnPaint()
{
CPaintDC dc(this);
CRect rect;
GetClientRect(&rect);
dc.FillRect(&rect, &m_backgroundBrush);
CString text;
GetWindowText(text);
dc.SetBkMode(TRANSPARENT);
dc.DrawText(text, &rect, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
}
BEGIN_MESSAGE_MAP(CDynamicButton, CButton)
ON_WM_ERASEBKGND()
ON_WM_PAINT()
END_MESSAGE_MAP()
```
4. 在需要更改背景颜色的地方调用 `SetBackgroundColor` 函数即可:
```cpp
CDynamicButton button;
button.Create(_T("Button Text"), WS_CHILD | WS_VISIBLE | BS_OWNERDRAW, rect, this, IDC_BUTTON);
button.SetBackgroundColor(RGB(255, 0, 0)); // 设置红色背景
```