更改CComboBox的文本和背景

时间:2014-11-24 07:54:32

标签: visual-c++ mfc

我想要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;
}

似乎不起作用......我不明白为什么......

1 个答案:

答案 0 :(得分:0)

引自MSDN

  

CBS_DROPDOWNLIST 与CBS_DROPDOWN类似,只是编辑控件被显示当前的静态文本项替换   在列表框中选择。

因此,您无法更改编辑控件颜色的原因是使用此样式时没有编辑控件。因此条件if(CTLCOLOR_EDIT == nCtlColor)将永远不会成立。您可能希望尝试测试CTLCOLOR_STATIC