问题描述
我正在尝试在MFC应用程序的对话框窗口中更改静态文本(以及复选框项)的颜色。
遵循此(MFC - change text color of a cstatic text control)和类似的建议,我对,
消息进行了以下操作:
ON_WM_CTLCOLOR()
问题在于,这仅影响编辑文本框,而不影响静态文本或复选框。那些仍然有黑色文字。
我还试图寻找类似于winapi的HBrush CMyDialog::OnCtlColor(CDC* pDC,CWnd *pWnd,UINT nCtlColor)
{
pDC->SetTextColor(RGB(255,0));
return (HBrush)GetStockObject(NULL_Brush);
}
消息,因为该消息在win32应用程序中运行良好,但在MFC中找不到任何等效项。知道如何更改静态文本和复选框文本的颜色吗?
解决方法
这对我有用:
将其放在消息映射中:
ON_WM_CTLCOLOR()
并执行以下操作:
HBRUSH CSomeDlg::OnCtlColor(CDC* pDC,CWnd* pWnd,UINT nCtlColor)
{
HBRUSH hbr = __super::OnCtlColor(pDC,pWnd,nCtlColor);
if (pWnd->GetDlgCtrlID() == IDC_SOMESTATIC)
{
// display the static control IDC_SOMESTATIC in red
pDC->SetTextColor(RGB(255,0));
}
return hbr;
}
,
从工具箱中添加静态文本控件时,它将获得ID IDC_STATIC。 您需要将此ID重命名为其他名称,然后使用OnCtlColor。假设您将其命名为 IDC_STATIC_1 ,请在OnCtlColor中使用:
case IDC_STATIC_1:
pDC->SetBkMode(TRANSPARENT);
pDC->SetTextColor(RGB(100,110,120);