我有一个我调用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 调用或任何方法可以手动清除窗口?