更改 MFC 对话框元素的背景颜色
Posted
技术标签:
【中文标题】更改 MFC 对话框元素的背景颜色【英文标题】:Changing the background color of an MFC dialog element 【发布时间】:2014-07-28 19:53:33 【问题描述】:我有一个基于 MFC 对话框的程序,其中包含多个元素。我正在使用带有 SP1 的 VS2010 Professional 在 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);
;
然后,我将所有 CSliderCtrl 元素替换为 MySlider 元素,并将所需的背景 rgb 值传递给构造函数。然而,这并没有奏效。
谁能帮我弄清楚如何正确设置滑块元素的背景颜色? (或与此相关的任何其他元素)
【问题讨论】:
相关? ***.com/q/12006168/3747990,IIRC,CSliderCtrl::OnCtlColor
应该在 SetBkColor
之前调用。
【参考方案1】:
使用背景颜色创建一个画笔并返回该 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;
【讨论】:
【参考方案2】:覆盖 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
【讨论】:
cdc 从何而来? 我怀疑 cdc 是 dc 的拼写错误,声明为CPaintDC(this)
。以上是关于更改 MFC 对话框元素的背景颜色的主要内容,如果未能解决你的问题,请参考以下文章