CFormView::OnCtlColor 控件背景颜色问题
很久没有提出过疑问,这个问题就想搞清楚怎么回事.
在继承CDialog的窗体中使用如下代码改变一个GroupBox控件的背景颜色是有效的
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if (pWnd->GetDlgCtrlID() == IDC_STATIC_GB)
{
pDC->SetBkMode(TRANSPARENT);
hbr= CreateSolidBrush(RGB(255, 0, 214));
return hbr;
}
同样的代码放在继承的CFormView中无效果
HBRUSH hbr = CFormView::OnCtlColor(pDC, pWnd, nCtlColor);
if (pWnd->GetDlgCtrlID() == IDC_STATIC_GB)
{
pDC->SetBkMode(TRANSPARENT);
hbr= CreateSolidBrush(RGB(255, 0, 214));
return hbr;
}
其它按钮CButton控件也是无法改变颜色只能有Static的Label控件可以改变颜色.不知是何原因?CDialog与CFormView中处理不一样?
==============================================
另外以前在vs2008中使用继承一个新控件响应WM_CTLCOLOR消息却是可以改变颜色的.后来使用vs2015同样的代码却无效果.非常奇怪.
HBRUSH hbr = __super::OnCtlColor(pDC, GetParent(), nCtlColor);
if (m_propFont != NULL && GetPropFontColor() > 0)
{
pDC->SetTextColor(GetPropFontColor());
}
if (IsPropExist(PROP_FUNC_TRAN_BACK) && GetPropTranBack())
{
pDC->SetBkMode(TRANSPARENT);
return (HBRUSH)GetStockObject(NULL_BRUSH);
}else if (m_propBackColor != NULL && GetPropHBrush() != NULL)
{
pDC->SetBkMode(TRANSPARENT);
//pDC->SetTextColor(RGB(255, 0, 0));
//pDC->SetBkColor(RGB(255, 255, 255));
//pDC->SetBkMode(TRANSPARENT);
return GetPropHBrush();
}
return hbr;