Compartir a través de


Usar una barra de cuadro de diálogo con un control Rebar

Como se indica en Controles y Bandas Rebar, cada banda sólo puede contener una ventana secundaria (o el control). Esto podría ser una limitación si desea tener más de una ventana secundaria por banda. Una solución conveniente es crear un recurso de la barra de cuadro diálogo con varios controles y agregar una banda rebar (que contiene la barra de cuadro diálogo) al control rebar.

Normalmente, si desea banda de la barra de cuadro diálogo aparezca transparente, establecería WS_EX_TRANSPARENT extendidas estilo para el objeto de la barra de cuadro de diálogo. Sin embargo, como WS_EX_TRANSPARENT tiene algunos problemas correctamente el dibujo del fondo de una barra de cuadro de diálogo, necesitará hacer el trabajo algún adicional para lograr el efecto deseado.

El procedimiento siguiente detalla los pasos necesarios para lograr la transparencia sin utilizar WS_EX_TRANSPARENT extendidas estilo.

Para implementar una barra de cuadro diálogo transparente en una banda rebar

  1. Mediante Agregue el cuadro de diálogo de la clase, agregue una nueva clase (por ejemplo, CMyDlgBar) que implementa el objeto de la barra de cuadro de diálogo.

  2. Agregue un controlador para el mensaje de WM_ERASEBKGND .

  3. En el nuevo controlador, modifique el código existente para que coincida con el ejemplo siguiente:

    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. Agregue un controlador para el mensaje de WM_MOVE .

  5. En el nuevo controlador, modifique el código existente para que coincida con el ejemplo siguiente:

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

Los nuevos controladores simulan la transparencia de la barra de cuadro diálogo reenviando el mensaje de WM_ERASEBKGND a la ventana primaria y fuerza una repintura cada vez que se mueve el objeto de la barra de cuadro de diálogo.

Vea también

Referencia

Usar CReBarCtrl

Conceptos

Controles (MFC)