SetWindowRgn

SetWindowRgnを使うとウィンドウの指定のリージョンの部分のみ表示するようになる。
つまりウィンドウを非矩形なリージョンの形にできるということ。

SetWindowRgn function (winuser.h) - Win32 apps | Microsoft Docs

SetWindowRgnに指定したリージョンはシステム管理となるため、解放してはいけない。
とはいえ個別のリージョンは解放したいので、空のリージョンを作ってそれに結合リージョンをコピーし、それをウィンドウにセットという形にする。

WM_CREATEで、

hRgn1とNULLを指定して、RGN_COPYでCombineRgnすると、hRgn3にリージョンがコピーされる。
hRgn1とhRgn2は解放可能だが、hRgn3は解放してはいけない。
この状態でhRgn3でSetWindowRgn。

WM_PAINTで、

ウィンドウに画像を描画すると、

非矩形ウィンドウが宙に浮いている
非矩形ウィンドウが宙に浮いている

非矩形ウィンドウが宙に浮いている。

Sample/winapi/SetWindowRgn/SetWindowRgn/src/SetWindowRgn at master · bg1bgst333/Sample · GitHub