ミニタイマー(3) - DWMの半透明ウィンドウとDirect2D描画の共有

公開:2011-04-27 20:38
更新:2020-02-15 04:36
カテゴリ:windows,direct2d,その他api,dwm,ミニタイマー,c++

DWMの半透明ウィンドウとDirect2D描画の共存だができた。

20110426.png

下記にその方法が書いてあった。Direct2DとDWMをキーワードにしてぐぐったらすぐに出てきた。

http://weblogs.asp.net/kennykerr/archive/2009/09/15/direct2d-and-the-desktop-window-manager.aspx

HwndRenderTargetを作成するときにピクセルフォーマットを合わせるのと、D2D1_ALPHA_MODE_PREMULTIPLIEDを指定しないといけないようだ。理由を知ろうとMSDNの日本語ドキュメントを見たが私の理解不足もありいまいちわからない。以下のその部分のコード。

const D2D1_PIXEL_FORMAT format =
D2D1::PixelFormat(DXGI_FORMAT_B8G8R8A8_UNORM,
D2D1_ALPHA_MODE_PREMULTIPLIED);
const D2D1_RENDER_TARGET_PROPERTIES target_prop =
D2D1::RenderTargetProperties(D2D1_RENDER_TARGET_TYPE_DEFAULT,format);
THROW_IFERR(factory_->CreateHwndRenderTarget(
target_prop,
D2D1::HwndRenderTargetProperties(hwnd_, size,D2D1_PRESENT_OPTIONS_IMMEDIATELY),
&render_target_
));

変更したソースコード全体