更改MFC对话框元素的背景颜色

时间:2014-07-28 19:53:34

标签: c++ visual-studio-2010 background mfc element

我有一个带有多个元素的基于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值传递给构造函数。但是,这并没有结束。

有人可以帮我弄清楚如何正确设置滑块元素的背景颜色吗? (或该问题的任何其他要素)

2 个答案:

答案 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;
}