[英]Changing the background color of an MFC dialog element
我有一個包含多個元素的基於MFC對話框的程序。 我正在Windows 7上使用VS2010 Professional和SP1進行開發。 我想更改某些滑塊元素的背景顏色(來自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值傳遞給構造函數。 但是,這最終沒有奏效。
有人可以幫我弄清楚如何正確設置滑塊元素的背景色嗎? (或與此相關的任何其他元素)
覆蓋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
}
創建具有背景色的畫筆,並返回該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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.