您可以在BTNLOOK程式中尝试这种方法。当WNDCLASS结构中的hbrBackground值是这个值时,Windows会明白这实际上指的是一种系统颜色而非一个实际的代号。Windows要求当您在WNDCLASS结构的hbrBackground栏中指定这些识别字时加上1,这样做的目的是防止其值为NULL,而没有任何其他目的。如果您的在程式执行过程中,系统颜色恰好发生了变化,那么显示区域将变得无效,而Windows将使用新的COLOR_BTNFACE值。但是现在我们又引发了另一个问题。当您使用TextOut显示文字时,Windows使用的是在装置内容中为背景颜色(它擦除文字後的背景)和文字颜色定义的值,其预设值为白色(背景)和黑色(文字),而不管系统颜色和视窗类别结构中的hbrBackground栏位为何值。所以,您需要使用SetTextColor和SetBkColor将文字和文字背景的颜色改变为系统颜色。您可以在获得装置内容代号之後这么做:
这样,显示区域背景、文字背景和文字的颜色都与按钮的颜色一致了。但是,如果当您的程式执行时,使用者改变了系统颜色,您可能要改变文字背景颜色和文字颜色。这时您可以使用下面的程式码:
WM_CTLCOLORBTN讯息
在这边已经看到了如何将显示区域的颜色和文字颜色调节成按钮的背景颜色。我们是否可以将程式中按钮的颜色调节为我们喜欢的颜色呢?理论上没有问题,但在实际中请别这样做。用SetSysColors来改变按钮的外观可能不是您想做的,这会影响目前在Windows下执行的所有程式,这也是使用者不太喜欢的。
更好的方法(同样也只是理论上)是处理WM_CTLCOLORBTN讯息,这是当子视窗即