|
使用API函数GetRValue,GetBValue及GetGValue。这里有一个以析取红绿蓝来改变窗口背景色的例子。(注意:在使用下面的例子代码前,请将窗口的Color设为clBlue,clNavy或其它任何一种非系统颜色,诸如clBtnFace) ! V0 |& p1 h6 N% q% ?4 {
void __fastcall TForm1::Button1Click(TObject *Sender)
2 A: b5 f. X3 h{
* F: K) M! o. h$ @ BYTE nRed = GetRValue(Color);, r* z( e: R2 G, X
BYTE nBlue = GetBValue(Color);4 A# G7 k8 z4 o' @/ t) u& a7 G: d
BYTE nGreen = GetGValue(Color);
6 c" N8 H* I9 g7 e # z( E* r; |9 O1 Z6 e9 T
nRed +=10;7 |! H+ A ^0 A' W( {4 R2 r$ x
nBlue -=10;& \6 `4 F; m9 s9 F" Z
nGreen *= 1.05;4 u. T1 B5 o' q7 j) r
Color =(TColor) RGB(nRed, nGreen, nBlue);5 b, G5 n8 J& v' y& {
}/ [" N& N* @+ ^, [/ S. A
注意:Get系列函数返回一个0~255的亮度值。因为单个亮度值为一个字节所以返回类型为BYTE。当你把亮度值设为小于0或大于255时,RGB宏将截去多余的字节(它只取低8位) 。 ! c0 C z1 V7 V, y4 w7 G
注意:从技术上讲,这三个Get函数实际上不是函数,它们是C风格的宏。你可以在Include\Win32\wingdi.h中看到它们的实现。使用宏的一个结果是:函数不是类型安全的。你可以将char *传给宏而不会得到任何警告。 |