37. How do I change the colour or background of a static text item on a dialog?
By handling the WM_CTLCOLOR message. Here's a
sample in MFC-style code that illustrates the technique.
HBRUSH CTestbed2Dlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr;
switch (nCtlColor)
{
case CTLCOLOR_STATIC:
pDC->SetTextColor (RGB(128,0,0));
// red text.
hbr = (HBRUSH)GetStockObject(NULL_BRUSH);
break;
default:
hbr =
CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
break;
}
return hbr;
}
If you wanted to change the background colour of
your statics, you could do it by adding a
call to SetBkColor. For instance
pDC->SetBkColor
(RGB(0,0,0));
would give you a black background for your static
text.
Incidentally, you can combine this technique with
Tip #11 to neaten up dialogs with bitmap backgrounds.
Just add the line
pDC->SetBkMode (TRANSPARENT);
to the CTLCOLOR_STATIC handler, and your
bitmap will show through all the static item backgrounds.