|
使用API函数GetRValue,GetBValue及GetGValue。这里有一个以析取红绿蓝来改变窗口背景色的例子。(注意:在使用下面的例子代码前,请将窗口的Color设为clBlue,clNavy或其它任何一种非系统颜色,诸如clBtnFace) 6 X( W& [- j2 S5 E$ O, b& }
void __fastcall TForm1::Button1Click(TObject *Sender)
5 ?7 f0 S9 h2 K$ \{8 W+ B- k- _/ m& e3 b& r+ G% V
BYTE nRed = GetRValue(Color);! p" A6 e& H4 r4 j. { U8 n0 O: N
BYTE nBlue = GetBValue(Color);- W, L ]8 \$ W8 g" Y: X' z. J* t8 v
BYTE nGreen = GetGValue(Color);
; K5 g" u) C, F/ I" I 1 ^3 ]2 X! }8 W* o q% r
nRed +=10;4 D. Q7 O8 l" I0 ` O0 L
nBlue -=10;
' J9 y* L1 h3 J7 W: m nGreen *= 1.05;6 d2 z: U0 O& a8 t
Color =(TColor) RGB(nRed, nGreen, nBlue);' u& Q9 Z( N) ^: c) h4 s
}8 |; |& V3 M3 l2 |
注意:Get系列函数返回一个0~255的亮度值。因为单个亮度值为一个字节所以返回类型为BYTE。当你把亮度值设为小于0或大于255时,RGB宏将截去多余的字节(它只取低8位) 。
; _4 o, {, t" i Y! F, w1 S! F注意:从技术上讲,这三个Get函数实际上不是函数,它们是C风格的宏。你可以在Include\Win32\wingdi.h中看到它们的实现。使用宏的一个结果是:函数不是类型安全的。你可以将char *传给宏而不会得到任何警告。 |