我有一个窗口,我称之为DwmExtendFrameIntoClientArea()
,
窗口托管其他子窗口,我使用Direct2D在其中一个子窗口上绘制,
当加载位图上有黑色区域时,该区域变得模糊。
我希望清除子窗口中的所有内容并在WM_PAINT
上再次绘制它,但我似乎无法清除内容。
我尝试使用
清除它m_pRenderTarget->Clear(D2D1::ColorF(D2D1::ColorF::Black))
这会使子窗口区域变黑,它会删除所有先前的绘图,但不会透明。
我试图在客户区
上绘制一个只是黑条的位图m_pRenderTarget->DrawBitmap(m_pBkgrnd,D2D1::Rect<float> (0.f,0.f,GetWidth(),GetHeight()))
这使得之前出现的任何内容都是黑色的。
尝试在整个子窗口上绘制黑色区域的旧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);
不能工作。
但是,如果我不做任何这样的事情,我会尝试调整主窗口的大小,它就可以正常工作,即之前的绘画消失了。
在我再次绘制之前是否有任何API调用或手动清除窗口的方法?
答案 0 :(得分:0)
您是如何初始化渲染目标的?确保指定Premultipled Alpha,而不是Straight或Ignore。然后,要将所有内容清除为透明,请使用ID2D1RenderTarget :: Clear(D2D1 :: ColorF(0,0,0,0))。您不能使用像FillRectangle这样的东西来绘制透明色,因为这会将透明色混合到已经存在的内容中,这是一种无操作。