更改 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 的文本和背景的主要内容,如果未能解决你的问题,请参考以下文章

在 MFC 中更改组合框的项目背景颜色?

更改自定义文本字段背景颜色和文本颜色IOS Swift

更改 ItemDelegate 的背景和文本颜色

如何更改 UITableHeaderView 的背景颜色和文本颜色

更改文本框中文本的前景色和背景色

如何在卡片内的按钮上进行 onclick 事件:更改卡片背景颜色、按钮背景和文本颜色以及文本内容