我们如果想为创建的静态控件自定义背景颜色,那么就需要手动处理WM_CTLCOLORSTATIC消息。如果我们处理该消息,就需要返回一个画刷,该画刷用来绘制该控件的背景色。现在我们来看看使用画刷、空画刷、以及不使用画刷的区别。
1.使用空画刷
NULL_BRUSH / HOLLOW_BRUSH
控件的背景色是透明的,没有绘制,空画刷其实就是什么都不做。
注意:控件的背景色和控件中的文本的背景色并不是同一个!要想单独设置控件文本的背景色,需要使用函数SetBkColor()。
2.使用指定颜色的画刷
控件的背景颜色由返回的画刷绘制,如图我们使用了白色画刷,那么控件的背景色也是白色。
注意:如果返回的画笔,是我们手动创建的,例如使用 CreateSolidBrush 或 CreateBrushIndirect 函数,则必须释放画笔,否则会造成内存泄漏。 如果应用程序返回系统画笔 ,例如 GetStockObject 或 GetSysColorBrush 函数检索的画笔,则应用程序不需要释放画笔。
3.不使用画刷
可以看到控件背景颜色是灰色,不使用画刷,父窗口会为你绘制默认的颜色。
那如果想为控件绘制全透明的背景该怎么做呢?
很简单,只需要返回一个空的画刷,告诉父窗口不需要使用画刷绘制背景,然后在返回前使用SetBkMode()函数,设置一下背景模式为透明即可。
注意:SetBkMode()设置了透明模式,那么无论是控件的背景还是控件文本的背景都是透明的。