Usando um BAR de diálogo com um controle rebar

Conforme mencionado na Controles de rebar e faixas, cada banda pode conter apenas um filho janela (ou controle).Isso pode ser uma limitação se desejar ter mais de uma janela filho por banda.Uma alternativa conveniente é criar um BAR de diálogo recursos com vários controles e, em seguida, adicione uma banda rebar (que contém o BAR de diálogo) para o controle rebar.

Normalmente, se você quisesse o BAR de diálogo banda apareçam transparente, você deve conjunto o WS_EX_TRANSPARENT estendido estilo para o BAR de diálogo objeto.No entanto, como WS_EX_TRANSPARENT tem alguns problemas com corretamente pintar o plano de fundo de um BAR de diálogo, você precisará fazer um pouco trabalho extra para atingir o efeito desejado.

O procedimento a seguir detalha as etapas necessárias para atingir a transparência sem usar o WS_EX_TRANSPARENT estilo estendido.

Para implementar um transparente BAR de diálogo em uma faixa de rebar

  1. Usando o Adicionar caixa de diálogo de classe, adicione uma nova classe (por exemplo, CMyDlgBar) que implementa o BAR de diálogo objeto.

  2. Adicionar um manipulador para o WM_ERASEBKGND mensagem.

  3. No manipulador de novo, modificar o código existente para coincidir com o exemplo a seguir:

    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. Adicionar um manipulador para o WM_MOVE mensagem.

  5. No manipulador de novo, modificar o código existente para coincidir com o exemplo a seguir:

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

Novos manipuladores simular a transparência da BAR de diálogo, encaminhando o WM_ERASEBKGND mensagem para a janela pai e forçando um Redesenhar toda vez que o objeto de BAR da caixa de diálogo é movido.

Consulte também

Conceitos

Controles (MFC)

Referência

Usando CReBarCtrl