<色情報(数値)変換のいろいろ> 初期化ファイルに保存した 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. |