directxでバックバッファに描画したものをウィンドウリージョンでくりぬいて、描画されているところ以外を透明にしたいです。
こちらのサイト"http://ru11en.wordpress.com/2011/04/10/ ... %E3%81%9F/"のようなイメージです。
こちら"http://marupeke296.com/TIPS_No11_AutoRegion.html"のサイトなどを参考に下のようにしてみたのですが、何も表示されず困っています。
下のコードでまずいところや直すべきところ、もし他の方法があれば教えていただきたいです。
CreateWindowEXにおいてWS_EX_TOP_MOST | WS_EX_LAYEREDを指定してあります。
g_pD3DDev->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_STENCIL | D3DCLEAR_ZBUFFER, 0x00000000, 1.0f, 0);
g_pD3DDev->BeginScene();
//省略
g_pD3DDev->EndScene();
g_pD3DDev->GetBackBuffer(0, 0, D3DBACKBUFFER_TYPE_MONO, &pSurface);
pSurface->GetDC(&devContext);
BITMAP bi;
GetObject(CreateCompatibleBitmap(devContext, WINDOW_SIZE_W, WINDOW_SIZE_H), sizeof(BITMAP), &bi);
HRGN hRgn = CreateRectRgn(0, 0, WINDOW_SIZE_W, WINDOW_SIZE_H);
HDC hDC = GetDC(NULL);
HDC memDC = CreateCompatibleDC(hDC);
SelectObject(memDC, CreateCompatibleBitmap(devContext, WINDOW_SIZE_W, WINDOW_SIZE_H));
for(int y = 0;y < WINDOW_SIZE_H;y++){
for(int x = 0;x < WINDOW_SIZE_W;x++){
COLORREF color = GetPixel(memDC, x, y);
if(color == 0x00000000){
HRGN DiffRgn = CreateRectRgn(x, y, x + 1, y + 1);
CombineRgn(hRgn, hRgn, DiffRgn, RGN_DIFF);
DeleteObject(DiffRgn);
}
}
}
DeleteDC(memDC);
ReleaseDC(hWnd, hDC);
SetWindowRgn(hWnd, hRgn, true);