我想要CComboBox的彩色编辑框。但我想为CBS_DROPDOWN样式和CBS_DROPDOWNLIST做到这一点。 我重写
HBRUSH CMyComboBox::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CComboBox::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here
if(CTLCOLOR_EDIT == nCtlColor)
{
pDC->SetTextColor(m_crAlertText);
pDC->SetBkColor(m_crAlertBkg);
hbr = m_hBrushAlert;
pDC->SetBkMode(TRANSPARENT);
}
// TODO: Return a different brush if the default is not desired
return hbr;
}
但如果CComboBox具有CBS_DROPDOWNLIST样式,那么无法正常工作 ...为什么?
稍后编辑:
是的,我已经尝试过了:
HBRUSH CMyComboBox::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CComboBox::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here
// if(CTLCOLOR_STATIC == nCtlColor)
if(CTLCOLOR_EDIT == nCtlColor || CTLCOLOR_STATIC == nCtlColor)
{
pDC->SetTextColor(m_crAlertText);
pDC->SetBkColor(m_crAlertBkg);
hbr = m_hBrushAlert;
pDC->SetBkMode(TRANSPARENT);
}
// TODO: Return a different brush if the default is not desired
return hbr;
}
似乎不起作用......我不明白为什么......
答案 0 :(得分:0)
引自MSDN:
CBS_DROPDOWNLIST 与CBS_DROPDOWN类似,只是编辑控件被显示当前的静态文本项替换 在列表框中选择。
因此,您无法更改编辑控件颜色的原因是使用此样式时没有编辑控件。因此条件if(CTLCOLOR_EDIT == nCtlColor)
将永远不会成立。您可能希望尝试测试CTLCOLOR_STATIC
。