SetROP2を使うと、背景色の上に描画色を描画する時の、ビットピクセル操作のモードを変更できる。
(こういう処理をラスタオペレーションというらしい。)
SetROP2 function (wingdi.h) | Microsoft Docs
ラスタオペレーション
WM_PAINTで、
case WM_PAINT:
{
HDC hDC;
PAINTSTRUCT ps;
HPEN hOldPen;
HBRUSH hOldBrush;
hDC = BeginPaint(hwnd, &ps);
Rectangle(hDC, 10, 10, 100, 100);
Rectangle(hDC, 60, 60, 160, 160);
hOldPen = (HPEN)SelectObject(hDC, hPen1);
hOldBrush = (HBRUSH)SelectObject(hDC, hBrush1);
Rectangle(hDC, 300, 300, 400, 400);
(HPEN)SelectObject(hDC, hPen2);
(HBRUSH)SelectObject(hDC, hBrush2);
Rectangle(hDC, 350, 350, 450, 450);
(HPEN)SelectObject(hDC, hOldPen);
(HBRUSH)SelectObject(hDC, hOldBrush);
EndPaint(hwnd, &ps);
}
break;
とした場合、
デフォルトは、そのまま重ね合わせるのでこうなる。
しかし、
SetROP2で、背景と描画色が同じなら反転するR2_XORPENをセットすると、
こうなる。
左上は、背景が白で、描画する矩形も白なので黒になり、矩形が重なる部分はさらに反転して白になる。
右下は、色が変わってしまう。
Sample/winapi/SetROP2/SetROP2/src/SetROP2 at master · bg1bgst333/Sample · GitHub