|
<色情報(数値)変換のいろいろ> 初期化ファイルに保存した COLORREF 数値は LONG 型ですので、3つのスクロールバー位置を セットするには、RGB に分解しなければなりません。 RGB情報に変換する方法として、(私の場合は)3通りほど考えました。
int r, g, b ;
COLORREF crColor ;
・除算と乗算を使う
b = crColor / 65536 ;
g = (crColor - b * 65536) / 256 ;
r = charColor - (b * 65536 + g * 256);
・シフト演算と論理演算を使う
r = crColor & 0xFF ;
g = (crColor & 0xFF00) >> 8 ;
b = crColor >> 16 ;
・共用体を使う
union {
COLORREF crData ;
unsigned char uchar[4] ;
} ColorData ;
ColorData.crData = crColor ;
r = (int)ColorData.uchar[0] ;
g = (int)ColorData.uchar[1] ;
b = (int)ColorData.uchar[2] ;
この中で実際に使用したのは共用体です。理由は速度面からではなく、 配列を使うと何かと便利だからです。たとえば、3つの10進値を右下の3つのウィンドウに 出力する場合に、3つのRECT構造体も配列にすれば、3回の処理をループにかけられます。 (下記参照)
ColorData.crData = crColor ;
for(i = 0 ; i < 3 ; i++)
{
wsprintf(szColor, "%d", ColorData.uchar[i]) ;
DrawText(hdc, szColor, (int)strlen(szColor),
&rect[i], DT_RIGHT | DT_BOTTOM) ;
}
|
|
|
|
| Copyright (c) 2003-2004 HIDEKAZU KAJIURA. All Rights Reserved. |