대화 상자 모음과 Rebar 컨트롤 함께 사용

Rebar Controls 및 Bands멘션 각 밴드는 하나의 자식 창(또는 컨트롤)만 포함할 수 있습니다. 밴드당 둘 이상의 자식 창을 갖도록 하려는 경우 이 제한 사항이 있을 수 있습니다. 편리한 해결 방법은 여러 컨트롤이 있는 대화 상자 모음 리소스를 만든 다음, Rebar 컨트롤에 rebar 밴드(대화 모음 포함)를 추가하는 것입니다.

일반적으로 대화 상자 표시줄 밴드가 투명하게 표시되도록 하려면 대화 상자 표시줄 개체의 WS_EX_TRANSPARENT 확장 스타일을 설정합니다. 그러나 WS_EX_TRANSPARENT 대화 상자 표시줄의 배경을 제대로 그리는 데 몇 가지 문제가 있으므로 원하는 효과를 얻기 위해 약간의 추가 작업을 수행해야 합니다.

다음 절차에서는 WS_EX_TRANSPARENT 확장 스타일을 사용하지 않고 투명도를 달성하는 데 필요한 단계를 자세히 설명합니다.

Rebar 밴드에서 투명한 대화 상자를 구현하려면

  1. 클래스 추가 대화 상자를 사용하여 대화 상자 표시줄 개체를 구현하는 새 클래스(예CMyDlgBar: )를 추가합니다.

  2. WM_ERASEBKGND 메시지에 대한 처리기를 추가합니다.

  3. 새 처리기에서 다음 예제와 일치하도록 기존 코드를 수정합니다.

    BOOL CMyDlgBar::OnEraseBkgnd(CDC *pDC)
    {
       CWnd *pParent = GetParent();
       ASSERT_VALID(pParent);
       CPoint pt(0, 0);
       MapWindowPoints(pParent, &pt, 1);
       pt = pDC->OffsetWindowOrg(pt.x, pt.y);
       LRESULT lResult = pParent->SendMessage(WM_ERASEBKGND,
                                              (WPARAM)pDC->m_hDC, 0L);
       pDC->SetWindowOrg(pt.x, pt.y);
       return (BOOL)lResult;
    }
    
  4. WM_MOVE 메시지에 대한 처리기를 추가합니다.

  5. 새 처리기에서 다음 예제와 일치하도록 기존 코드를 수정합니다.

    void CMyDlgBar::OnMove(int x, int y)
    {
       UNREFERENCED_PARAMETER(x);
       UNREFERENCED_PARAMETER(y);
    
       Invalidate();
    }
    

새 처리기는 WM_ERASEBKGND 메시지를 부모 창으로 전달하고 대화 상자 표시줄 개체가 이동할 때마다 다시 칠하도록 강제하여 대화 상자 표시줄의 투명도를 시뮬레이션합니다.

참고 항목

CReBarCtrl 사용
컨트롤