Partilhar via


Usando uma barra de diálogo com um controle Rebar

Como mencionado em Rebar controles e as faixas, cada faixa pode conter somente um filho janela (ou controle).Isso pode ser uma limitação se desejar ter mais de uma janela filho por faixa.É uma alternativa conveniente criar um recurso de barra de diálogo com vários controles e adicionar uma banda rebar (que contém a barra de diálogo) para o controle rebar.

Normalmente, se você quisesse a faixa da barra de diálogo apareçam transparentes, você definiria a WS_EX_TRANSPARENT estendido estilo para o objeto de barra de diálogo.No entanto, porque WS_EX_TRANSPARENT tem alguns problemas com pintura corretamente o plano de fundo de uma barra de diálogo, você precisará fazer um pouco de trabalho extra para atingir o efeito desejado.

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

Para implementar uma barra de diálogo transparente em uma banda rebar

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

  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 barra de diálogo pelo encaminhamento de WM_ERASEBKGND mensagem para a janela pai e forçar um repaint sempre que o objeto de barra de diálogo é movido.

Consulte também

Referência

Usando CReBarCtrl

Conceitos

Controles (MFC)