C ++ MFC更改单选框的背景颜色

Posted

技术标签:

【中文标题】C ++ MFC更改单选框的背景颜色【英文标题】:C++ MFC Changing Background color of radio box 【发布时间】:2016-05-27 02:20:05 【问题描述】:

我正在尝试更改 MFC 应用程序中三个单选框的背景颜色,但无论如何它们似乎仍然是默认颜色。

这是我最近的尝试: IDC_LIKE、IDC_FOLLOW 和 IDC_COMMENT 是我尝试更改颜色的三个单选框的标识符。 我什至尝试过更改 CTLCOLOR_STATIC 字段,但这也不起作用。

我该如何解决?

 // CCompleteControlDlg message handlers
HBRUSH CCompleteControlDlg::OnCtlColor(CDC * pDC, CWnd * pWnd, UINT nCtlColor)

if (pWnd->GetDlgCtrlID() == IDC_LIKE || pWnd->GetDlgCtrlID() == IDC_FOLLOW || pWnd->GetDlgCtrlID() == IDC_COMMENT) 
    pDC->SetTextColor(RGB(0, 0, 0));
    pDC->SetBkColor(RGB(136, 217, 242));
    pDC->SetBkMode(TRANSPARENT);
    return (HBRUSH)GetStockObject(NULL_BRUSH);

else 
    switch (nCtlColor) 
    case CTLCOLOR_STATIC:
        pDC->SetTextColor(RGB(0, 0, 0));
        pDC->SetBkColor(RGB(136, 217, 242));
        pDC->SetBkMode(TRANSPARENT);
        return (HBRUSH)GetStockObject(NULL_BRUSH);

    case CTLCOLOR_DLG: return m_brush;

    case CTLCOLOR_BTN:
        pDC->SetTextColor(RGB(255, 255, 255));
        pDC->SetBkColor(RGB(136, 217, 242));
        return (HBRUSH)GetStockObject(NULL_BRUSH);

    default:
        return CCompleteControlDlg::OnCtlColor(pDC, pWnd, nCtlColor);
    


【问题讨论】:

更改对话框颜色和静态文本对单选框无效 【参考方案1】:

SetTextColorSetBkColor 不会影响按钮的文本颜色和背景颜色。你必须归还刷子。您已经拥有m_brush,只需将其用于对话框和控件:

HBRUSH CCompleteControlDlg::OnCtlColor(CDC * pDC, CWnd * pWnd, UINT nCtlColor)

    ...
    return m_brush;

其中m_brush 被创建为CreateSolidBrush(RGB(136, 217, 242))...

要处理静态控件,只需将背景模式设置为透明即可:

HBRUSH CCompleteControlDlg::OnCtlColor(CDC * pDC, CWnd * pWnd, UINT nCtlColor)

    pDC->SetTextColor(RGB(0, 0, 0));
    pDC->SetBkMode(TRANSPARENT);
    return m_brush;

或者您可以为静态和编辑控件使用背景颜色 + 不透明背景:

pDC->SetTextColor(RGB(0, 0, 0));
pDC->SetBkColor(RGB(136, 217, 242));
pDC->SetBkMode(OPAQUE);
return m_brush;

【讨论】:

这适用于复选框,但由于某种原因不适用于我的单选按钮 复选框和单选按钮是一样的。请务必致电pDC->SetBkMode(TRANSPARENT) 或致电SetBkMode(OPAQUE)+SetBkColor(...) 如果这回答了您的问题,您可以单击接受按钮并关闭问题。

以上是关于C ++ MFC更改单选框的背景颜色的主要内容,如果未能解决你的问题,请参考以下文章

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

单选按钮,更改背景颜色 PHP

更改单选按钮的背景颜色

js实现点击选中,第二次点击取消选中状态

Mfc CComboBoxEx - 如何更改背景颜色

更改 SysLink 控件的背景颜色 - MFC