更改 CComboBox 的文本和背景
Posted
技术标签:
【中文标题】更改 CComboBox 的文本和背景【英文标题】:Change text and background of CComboBox 【发布时间】:2014-11-24 07:54:31 【问题描述】:我想给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】:引用MSDN:
CBS_DROPDOWNLIST 与 CBS_DROPDOWN 类似,只是编辑控件被替换为显示当前的静态文本项 在列表框中选择。
所以,你不能改变编辑控件颜色的原因是,当你使用这种样式时,没有编辑控件。因此条件if(CTLCOLOR_EDIT == nCtlColor)
永远不会为真。您可能希望尝试测试CTLCOLOR_STATIC
。
【讨论】:
以上是关于更改 CComboBox 的文本和背景的主要内容,如果未能解决你的问题,请参考以下文章