我有一个带有多个元素的基于MFC对话框的程序。我正在使用带有SP1的VS2010专业版在Windows 7上进行开发。我想更改某些滑块元素的背景颜色(来自CSliderCtrl
类)。我发现的唯一一件事是尝试覆盖CSliderCtrl的OnCtlColor
函数。我通过以下方式做到了这一点:
class MySlider : public CSliderCtrl
{
public:
MySlider(UINT r, UINT g, UINT b){R=r;G=g;B=b;}
virtual ~MySlider(){}
UINT R;
UINT G;
UINT B;
HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
pDC->SetBkColor(RGB(R, G, B));
return CSliderCtrl::OnCtlColor(pDC, pWnd, nCtlColor);
}
};
然后我用MySlider元素替换了所有CSliderCtrl元素,并将所需的背景rgb值传递给构造函数。但是,这并没有结束。
有人可以帮我弄清楚如何正确设置滑块元素的背景颜色吗? (或该问题的任何其他要素)
答案 0 :(得分:0)
覆盖OnPaint并绘制实心矩形
void MySlider::OnPaint()
{
CPaintDC dc(this); // device context for painting
RECT rect ;
CRect rectButton;
this->GetWindowRect(&rectButton);
COLORREF cr = RGB(60,180,80)
dc.FillSolidRect(&rect, cr); // Background color
// Any other drawing
}
答案 1 :(得分:0)
使用背景颜色创建画笔并返回HBRUSH以获得颜色更改。
HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
CSliderCtrl::OnCtlColor(pDC, pWnd, nCtlColor);
pDC->SetBkColor(RGB(R, G, B));
static CBrush br(RGB(R, G, B));
return (HBRUSH)br;
}