响应WM_CTLCOLOR消息,在WM_CTLCOLOR消息响应函数中返回一个全局的或成员变量的颜色画刷,
该画刷就是作为背景色的画刷。如下:
HBRUSH CPreview3dCtlDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if(pWnd->GetDlgCtrlID()== IDC_TIPS)
{
pDC->SetTextColor(RGB(255,0,0));
pDC->SetBkColor(RGB(0, 0, 0));//设置文本背景色
pDC->SetBkMode(TRANSPARENT);//设置背景透明
}
return m_hBlackBrush; // 不能为局部变量,否则函数返回时会析构,不会出现黑色背景
}
其中m_hBlackBrush是在构造函数中创建的黑色画刷,如下:
m_hBlackBrush = ::CreateSolidBrush(RGB(0, 0, 0));
如果在OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)函数里面创建一个局部画刷,则不会出现黑色背景,如下:
HBRUSH CPreview3dCtlDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
hBlackBrush = ::CreateSolidBrush(RGB(0, 0, 0));
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if(pWnd->GetDlgCtrlID()== IDC_TIPS)
{
pDC->SetTextColor(RGB(255,0,0));
pDC->SetBkColor(RGB(0, 0, 0));//设置文本背景色
pDC->SetBkMode(TRANSPARENT);//设置背景透明
}
return hBlackBrush ; // 不能为局部变量,否则函数返回时会析构,不会出现黑色背景
}