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】:SetTextColor
和SetBkColor
不会影响按钮的文本颜色和背景颜色。你必须归还刷子。您已经拥有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更改单选框的背景颜色的主要内容,如果未能解决你的问题,请参考以下文章