2012-02-22 3 views
0

내가 자식 창 중 하나에 페인트 Direct2D의를 사용하여, 나는 DwmExtendFrameIntoClientArea(), 윈도우 호스트 다른 자식 창을 호출하는 창을 가지고, 비트 맵 인 경우 거기에 검은 색 영역이 있고, 그 영역이 희미 해집니다. 자식 창에서 모든 내용을 지우고 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과 같은 것을 사용하여 투명한 색으로 그릴 수 없습니다. 투명한 색을 이미있는 색으로 혼합하므로 아무 작업도 수행되지 않습니다.