2012-02-22 19 views
0

私はDwmExtendFrameIntoClientArea()、 ウィンドウをホストしています。他の子ウィンドウをホストしています.Direct2Dを使用して子ウィンドウの1つにペイントします。 ビットマップがその上に黒色の領域があり、その領域がぼやけてしまいます。 子ウィンドウ内のすべてをクリアして、再度WM_PAINTにペイントしたいのですが、内容をクリアできないようです。ぼかし後のウィンドウ(DWM)でウィンドウの内容を消去する

  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. 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); 
    

    が動作しない、全体で子ウィンドウの上に黒領域を塗るの古いGDIの方法を試してみました。

  4. しかし、これを行わずにメインウィンドウのサイズを変更しようとすると、正しく動作します。すなわち、以前のペインティングが消えてしまいます。

もう一度描画する前にAPI呼び出しまたは手動でウィンドウを消去する方法はありますか?

答えて

0

レンダーターゲットをどのように初期化していますか? StraightまたはIgnoreではなくPremultipled Alphaを指定してください。次に、すべてを透明にクリアするには、ID2D1RenderTarget :: Clear(D2D1 :: ColorF(0、0、0、0))を使用します。 FillRectangleのようなものを透明色で描画することはできません。透明色を既にそこにあるものに混ぜるので、それは無操作です。

関連する問題