• ベストアンサー

COLORREF color の反転色

を作るつもりで color^=0xffffff; として表示させてみると colorがどんな色であっても黒くなってしまいました COLORREFの構造をサイト検索してもでていなかったので rgbが8ビットづつ積み重なっている単なるintと見なして以上のようにしたのですが何が悪いのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • HogePiyo
  • ベストアンサー率57% (24/42)
回答No.1

COLORREF は 32 ビット整数らしいので全ビットを XOR させたいなら、 color ^= 0xFFFFFFFF; とすべきところを color ^= 0xFFFFFF; と、1バイト分足りないからじゃないでしょうか? 以下、一応うまく行ったサンプルです。 ------------------------------------------------------------------------------- /* WM_PAINT で呼び出してください */ /*******************************************************************/ /* グラフィックの描画 */ /*******************************************************************/ static int graphicPaintProc( HWND hWnd ){ HDC hdc; PAINTSTRUCT ps; RECT rt; HBRUSH hBrush; COLORREF clrColor = RGB( 0x00, 0x00, 0x00 ); hdc = BeginPaint( hWnd, &ps ); GetClientRect( hWnd, &rt ); hBrush = CreateSolidBrush( clrColor ^= 0xFFFFFF ); FillRect( hdc, &rt, hBrush ); EndPaint( hWnd, &ps ); DeleteObject( hBrush ); return TRUE; } -------------------------------------------------------------------------------

参考URL:
http://black.sakura.ne.jp/~third/system/winapi/win18.html

その他の回答 (1)

  • HogePiyo
  • ベストアンサー率57% (24/42)
回答No.2

訂正です。 > hBrush = CreateSolidBrush( clrColor ^= 0xFFFFFF ); hBrush = CreateSolidBrush( clrColor ^= 0xFFFFFFFF ); 申し訳ないス。

nubou
質問者

お礼

ありがとうございました 3×8=24ビット だけでいいと思っていました

関連するQ&A