0

を呼び出すウィンドウがありDwmExtendFrameIntoClientArea()、そのウィンドウは他の子ウィンドウをホストし、Direct2D を使用して子ウィンドウの 1 つをペイントします。黒い領域を持つビットマップが読み込まれると、その領域がぼやけます。子ウィンドウのすべてをクリアして、もう一度ペイントしたいWM_PAINTのですが、内容をクリアできないようです。

  1. を使用してクリアしようとしました

    m_pRenderTarget->Clear(D2D1::ColorF(D2D1::ColorF::Black))
    

    これにより、子ウィンドウ領域が黒くなり、以前の描画がすべて消去されますが、透明度はなくなります。

  2. クライアント領域上の単なる黒いバーであるビットマップを描画しようとしました

    m_pRenderTarget->DrawBitmap(m_pBkgrnd,D2D1::Rect<float> (0.f,0.f,GetWidth(),GetHeight()))
    

    これにより、その前に現れたものはすべて黒くなります。

  3. 子ウィンドウ全体に黒い領域をペイントする古い GDI の方法を試してみました。

    RECT rc;
    GetClientRect(m_hwnd, &rc);
    HBRUSH brush = CreateSolidBrush(RGB(0,0,0));
    HDC hc=GetDC(m_hwnd);
    FillRect(hc, &rc, brush);
    ReleaseDC(m_hwnd,hc);
    DeleteObject(brush);
    

    うまくいきません。

  4. ただし、これを行わずにメイン ウィンドウのサイズを変更しようとすると、正しく機能します。つまり、前の絵が消えます。

ウィンドウを再度描画する前に手動でウィンドウをクリアする API 呼び出しまたは方法はありますか?

4

1 に答える 1