|
将为其显示区域著色时,由按钮控制项发送给其父视窗讯息处理程式的一个讯息。父视窗可以利用这个机会来改变子视窗讯息处理程式将用来著色的颜色(在Windows的16位元版本中,一个称为WM_CTLCOLOR的讯息被用於所有的控制项,现在针对每种型态的标准控制项,分别代之以不同的讯息)。
当父视窗讯息处理程式收到WM_CTLCOLORBTN讯息时,wParam讯息参数是按钮的装置内容代号,lParam是按钮的视窗代号。当父视窗讯息处理程式得到这个讯息时,按钮控制项已经获得了它的装置内容。当您的视窗讯息处理程式处理一个WM_CTLCOLORBTN讯息时,您必须完成以下三个动作:
理论上,子视窗使用该画刷来著色背景。当不再需要这个画刷时,您应该负责清除它。
下面是使用WM_CTLCOLORBTN的问题所在:只有按键和拥有者绘制按钮才给其父视窗发送WM_CTLCOLORBTN,而只有拥有者绘制按钮才会回应父视窗讯息处理程式对讯息的处理,而使用画刷来著色背景。这基本上是没有意义的,因为无论怎样都是由父视窗来负责绘制拥有者绘制按钮。
在本章後面,我们将说明,在某些情况下,一些类似於WM_CTLCOLORBTN但适用於其他型态控制项的讯息将更为有用。
拥有者绘制按钮
如果您想对按钮的所有可见部分实行全面控制,而不想被键盘和滑鼠讯息处理所干扰,那么您可以建立BS_OWNERDRAW样式的按钮,如程式9-2所展示的那样。
|