2012-02-22 67 views
0

我有我稱之爲DwmExtendFrameIntoClientArea(), 窗口主機其他子窗口的窗口,我用的Direct2D畫上子窗口之一, 當一個位圖加載其上有黑色區域,該區域變得模糊。 我希望清除子窗口中的所有內容並在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. 試圖在整個子窗口畫一個黑色區域的老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調用或任何方式手動清除窗口,然後再次繪製它?

回答

0

你是如何初始化你的渲染目標?確保您指定Premultipled Alpha,而不是直線或忽略。然後,要將所有內容都清除爲透明,請使用ID2D1RenderTarget :: Clear(D2D1 :: ColorF(0,0,0,0))。你不能使用像FillRectangle這樣的東西來繪製透明的顏色,因爲這會將透明顏色混合到已經存在的東西中,並且這是一個無操作。