Partilhar via


Usando uma caixa de diálogo com um controle rebar

Conforme mencionado em Controles e faixas de Rebar, cada linha distribuída pode conter apenas uma janela filho (ou controle). Ela pode ser uma restrição se você quer ter mais de uma janela filho pela faixa. Uma solução alternativa conveniente é criar um recurso da barra da caixa de diálogo com vários controles e adicione uma faixa de rebar (que contém a barra da caixa de diálogo) ao controle de rebar.

Normalmente, se você quisesse a faixa da barra da caixa de diálogo para exibir transparente, você definirá o estilo WS_EX_TRANSPARENT estendida do objeto da barra da caixa de diálogo. No entanto, como WS_EX_TRANSPARENT tem alguns problemas com corretamente pintura do plano de fundo de uma barra na caixa de diálogo, você precisará fazer o trabalho em vez de adicional para obter o efeito desejado.

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

Para implementar uma barra transparente da caixa de diálogo em um rebar una

  1. Usando Caixa de diálogo adicionar classe, adicione uma nova classe (por exemplo, CMyDlgBar) que implementa seu objeto da barra da caixa de diálogo.

  2. Adicionar um manipulador para a mensagem de WM_ERASEBKGND .

  3. No novo manipulador, modifique o código existente para corresponder ao seguinte exemplo:

    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 a mensagem de WM_MOVE .

  5. No novo manipulador, modifique o código existente para corresponder ao seguinte exemplo:

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

Os novos manipuladores simulam a transparência da barra da caixa de diálogo para encaminhar a mensagem de WM_ERASEBKGND para a janela pai e forçar repintar cada vez que o objeto da barra da caixa de diálogo é movido.

Consulte também

Referência

Usando CReBarCtrl

Conceitos

Controles (MFC)